1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <cmath> template<typename X> class A { X a; public: A(X x) : a(x) {} template<typename Y> auto diff(A<Y> const&y) const -> decltype(a-y.a) { return a-y.a; } }; template<typename X, typename Y> inline auto dist(A<X> const&x, A<Y> const&y) -> decltype(std::abs(x.diff(y))) { return std::abs(x.diff(y)); } int main() { A<double> x(2.0), y(4.5); std::cout<<" dist(x,y)="<<dist(x,y)<<'\n'; //<-- error here } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBYPiBjbGFzcyBBIHsKICBYIGE7CnB1YmxpYzoKICBBKFggeCkgOiBhKHgpIHt9CiAgdGVtcGxhdGU8dHlwZW5hbWUgWT4KICBhdXRvIGRpZmYoQTxZPiBjb25zdCZ5KSBjb25zdCAtPiBkZWNsdHlwZShhLXkuYSkKICB7IHJldHVybiBhLXkuYTsgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KaW5saW5lIGF1dG8gZGlzdChBPFg+IGNvbnN0JngsIEE8WT4gY29uc3QmeSkKICAtPiBkZWNsdHlwZShzdGQ6OmFicyh4LmRpZmYoeSkpKQp7IHJldHVybiBzdGQ6OmFicyh4LmRpZmYoeSkpOyB9CgppbnQgbWFpbigpCnsKICBBPGRvdWJsZT4geCgyLjApLCB5KDQuNSk7CiAgc3RkOjpjb3V0PDwiIGRpc3QoeCx5KT0iPDxkaXN0KHgseSk8PCdcbic7ICAgLy88LS0gZXJyb3IgaGVyZQp9
prog.cpp:9: warning: identifier ‘decltype’ will become a keyword in C++0x prog.cpp:9: error: expected initializer before ‘->’ token prog.cpp:15: error: expected initializer before ‘->’ token prog.cpp: In function ‘int main()’: prog.cpp:21: error: ‘dist’ was not declared in this scope
-
result: Compilation error (maybe you wish to see an example for C++ 4.7.2)


