В случае сбоя подстановки, связанного с псевдонимом шаблона (например, псевдонимом шаблона для отсутствующего имени типа члена, как показано во фрагменте кода ниже), должна ли возникать ошибка?
Clang и gcc, похоже, не согласны с этим:
// some types
struct bar { };
struct foo {
typedef void member_type;
};
// template alias
template<class T>
using member = typename T::member_type;
template<class T>
void baz(... ) { }
// only works for gcc, clang fails with: no type named 'member_type'
// in 'bar'
template<class T>
void baz( member<T>* ) { }
int main(int, char** ) {
baz<bar>(0); // picks first
baz<foo>(0); // picks second
return 0;
}
Так вот вопрос: кто прав и почему?
Спасибо :-)
clang -v
? Транк Clang 3.3 отлично компилирует код. - person Xeo   schedule 05.12.2012