1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <string> #include <iostream> template<typename T = int> void Add(...) { static_assert(sizeof(T) == 0, "Must be addable!"); } template<typename T1, typename T2> auto Add(T1&& t1, T2&& t2) -> decltype(std::forward<T1>(t1) + std::forward<T2>(t2)) { return std::forward<T1>(t1) + std::forward<T2>(t2); } struct f {}; int main() { std::cout << Add(std::string("Hello"), std::string(" world!")); Add(f(), f()); } |
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVCA9IGludD4gdm9pZCBBZGQoLi4uKSB7CiAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSAwLCAiTXVzdCBiZSBhZGRhYmxlISIpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IGF1dG8gQWRkKFQxJiYgdDEsIFQyJiYgdDIpIC0+CiAgZGVjbHR5cGUoc3RkOjpmb3J3YXJkPFQxPih0MSkgKyBzdGQ6OmZvcndhcmQ8VDI+KHQyKSkgewogICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxUMT4odDEpICsgc3RkOjpmb3J3YXJkPFQyPih0Mik7Cn0KCnN0cnVjdCBmIHt9OwoKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgQWRkKHN0ZDo6c3RyaW5nKCJIZWxsbyIpLCBzdGQ6OnN0cmluZygiIHdvcmxkISIpKTsKICAgIEFkZChmKCksIGYoKSk7Cn0K
prog.cpp: In function 'void Add(...) [with T = int]': prog.cpp:17:17: instantiated from here prog.cpp:5:5: error: static assertion failed: "Must be addable!"
-
result: Compilation error (maybe you wish to see an example for C++11)


