テンプレートエイリアス(、たとえばテンプレートのエイリアスが不足しているメンバのタイプ名にあります)を含む置換に失敗した場合は、エラーが発生するはずですか?テンプレートエイリアスとファイル
クランと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のトランクはコードをうまくコンパイルします。 – Xeo
ここでDebian clangバージョン3.1-8は、ちょうど待つ必要があるようです。ご意見ありがとうございます ! – max
少しだけ簡略化するために、テンプレートエイリアスを取り除くことができますか? – David