class Foo
{
public:
template<typename R, typename T, typename S>
static R add(T x, S y) { return x + y; }
};
template<typename Foo, typename T>
inline T add(T x, double y)
{
return Foo::add<T, T, double>(x, y);
}
int main()
{
Foo::add<double>(3.0, 4.0);
return 0;
}
Y2xhc3MgRm9vCnsKcHVibGljOgoJdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgUz4KCXN0YXRpYyBSIGFkZChUIHgsIFMgeSkgeyByZXR1cm4geCArIHk7IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIEZvbywgdHlwZW5hbWUgVD4KaW5saW5lIFQgYWRkKFQgeCwgZG91YmxlIHkpCnsKCXJldHVybiBGb286OmFkZDxULCBULCBkb3VibGU+KHgsIHkpOwp9CgppbnQgbWFpbigpCnsKCUZvbzo6YWRkPGRvdWJsZT4oMy4wLCA0LjApOwoJcmV0dXJuIDA7Cn0=
prog.cpp: In function ‘T add(T, double)’:
prog.cpp:11:19: error: expected primary-expression before ‘,’ token
return Foo::add<T, T, double>(x, y);
^
prog.cpp:11:22: error: expected primary-expression before ‘,’ token
return Foo::add<T, T, double>(x, y);
^
prog.cpp:11:24: error: expected primary-expression before ‘double’
return Foo::add<T, T, double>(x, y);
^~~~~~
prog.cpp:11:23: error: expected ‘;’ before ‘double’
return Foo::add<T, T, double>(x, y);
^~~~~~~
;
prog.cpp:11:30: error: expected unqualified-id before ‘>’ token
return Foo::add<T, T, double>(x, y);
^