I think the following code is well-formed and should compile with the -std=c++0x switch:
#include <iostream> template<typename T> struct make { static T&& it(); }; template<typename R, typename... T> struct exists { typedef R type; }; template< typename Func, typename T > void bar(T const& x, typename exists< int, decltype( make<Func>::it()(make<T const&>::it()) ) // SFINAE! >::type = 0 ) { std::cout << "bar-1\n"; } template< typename Func > void bar(...) { std::cout << "bar-2\n"; } int main() { bar<void(*)(int&)>(42); } I expect it to compile and print "bar-2". Instead, the compiler rejects the code with the error invalid initialization of reference >int&< with an expression of type >const int<. Cheers! SG -- Summary: [C++0x] rejects well-formed code: SFINAE, decltype, function call Product: gcc Version: 4.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: s dot gesemann at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40944