如果替換失敗涉及模板別名(,例如缺少成員類型名稱上的模板別名,如下面的代碼段中所示),是否應該觸發錯誤?模板別名和sfinae
鏘和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'說什麼?鏗鏘3.3主幹編譯代碼就好了。 – Xeo
Debian clang版本3.1-8在這裏,看起來像我只需要等待。感謝您的反饋意見 ! – max
你可以擺脫模板別名,只是爲了簡化一點點 – David