次のコードは、警告なしで g++ (Debian) で正しくコンパイルされます。
#include <list>
template <typename T>
struct A
{
T a;
typedef T value_type;
};
template <typename T>
struct B
{
typedef std::list < A <T> > Type;
};
template <typename Data>
void test ( Data d, typename Data::value_type::value_type b ) { }
int main(int argc, char* argv[])
{
B <double> ::Type b;
double c = 0.0;
test <typename B <double>::Type > (b, c);
return 0;
}
ただし、VS 2010 コンパイラを使用した後、次のエラーが発生しました。
Error 1 error C2770: invalid explicit template
argument(s) for 'void test(Data,Data::value_type::{ctor})
明示的な引数が正しくないのはなぜですか?
更新された質問
あなたのアドバイスが正しく理解されたかどうかはわかりません。このようなことを言いましたか?しかし、この構造は私には意味がありません。
template <typename Data>
void test ( Data d, typename identity <typename Data::value_type>::type::value_type b) { }