clang 3.0 と g++ 4.8.1 はどちらも、コメントに示されているエラーで次のコードを拒否します。
template<typename T>
struct S
{
void f()
{
this->dependent(); // no error: type of 'this' is dependent?
this->Dependent::dependent(); // error: 'Dependent' has not been declared
}
};
[basic.lookup.classref]によると
に続くクラス名または名前空間名。or -> 演算子は、postfix-expression 全体のコンテキストと、オブジェクト式のクラスのスコープの両方で検索されます。
そして [temp.dep.expr]
this
囲んでいるメンバー関数のクラス型が依存している場合、型依存です。
class-or-namespace-nameDependent
がオブジェクト式のクラスのスコープ内で検索され、オブジェクト式this
のクラスが依存している場合、テンプレートがインスタンス化されるまでこの検索を延期すべきではありませんか? 標準は正しい動作を指定していますか?
EDIT:clang 3.0は次のコードを受け入れますが、g ++ 4.8は上記と同じエラーを返します
template<typename T>
struct S
{
T m;
void f()
{
m.dependent();
m.Dependent::dependent();
}
};