Linux で Clang 3.3 を使用して C++ コードをコンパイルするのに問題があります。ただし、同じコードは gcc 4.8.2 および Intel Compiler でコンパイルされます。したがって、私のコードが実際に合法であるかどうかを知りたかったのです。通常、私はそのような質問でclangをより信頼しています;)
とにかく、コードフラグメントは次のとおりです。
namespace test {
template<class SCALAR=double>
struct Foo {
public:
template<class SCALAR_ARG>
friend Foo<SCALAR_ARG> create_Foo( );
typedef SCALAR scalar_t;
};
template<class SCALAR_ARG=double>
Foo<SCALAR_ARG> create_Foo( )
{
typedef Foo<SCALAR_ARG> impl_t;
return impl_t();
}
}
struct Dummy {
typedef Dummy impl_t;
};
int main() {
typedef test::Foo<Dummy> foo_t;
typedef typename foo_t::scalar_t scalar_t;
Dummy egv_;
test::create_Foo();
return 0;
}
どう思いますか?Clangのバグとして投稿する必要がありますか、それとも実際には形式が正しくありませんか?
前もってありがとう、ラファエル