[cfe-dev] clang c++0x template function declaration error

Toralf Niebuhr mamuelle at niebuhrt.de
Mon Jul 4 08:44:50 PDT 2011


I am trying to get the following code to compile and I am not sure
wether this is my mistake or a compiler bug:

--------------------------------- test.cpp
template <class T, void (T::*foo)() > class X { };

template <class T> 
auto type_constructor( void (T::*f)() ) -> X< T, f >;

class Y
       void bar() {};

int main () {
   decltype( type_constructor( &Y::bar ) ) x;

It fails with the following message, which doesn't explain what went

$ clang++ -c test.cpp -std=c++0x

test.cpp:14:15: error: no matching function for call to
'type_constructor' decltype( type_constructor( &Y::bar ) ) x;
test.cpp:4:6: note: candidate template ignored: substitution failure
[with T = Y] auto type_constructor( void (T::*f)() ) -> X< T, f >;
test.cpp:14:45: error: C++ requires a type specifier for all
declarations decltype( type_constructor( &Y::bar ) ) x;
   ~~~~~~~~                                ^
2 errors generated.

Can I give you more information?

More information about the cfe-dev mailing list