使用g ++而不是Visual C ++编译的类模板特化

时间:2013-01-26 23:48:47

标签: templates visual-c++ compiler-errors

以下用g ++编译,但不用Visual C ++编译(Visual Studio Express 2012)。为什么呢?

如果我使用foo以外的类型(int)来呼叫double,那么我希望这会打破,因为在这种情况下B<double>::bbb:aaa毫无意义。但是,如果我打算只使用foo类型调用int,那么它应该可以正常工作。实际上,即使我根本没有调用foo,VC ++中的编译也会失败!

struct A {
    typedef int aaa;
};

template <typename T>
struct B {
    typedef void bbb;
};

template <>
struct B<int> {
    typedef A bbb;
};

template <typename T>
typename B<T>::bbb::aaa // line 16
foo(const T &arg) {     // line 17
    return typename B<T>::bbb::aaa();
}

int main() {
    // Compilation fails with or without the following two lines.
    //int x = 0;
    //foo(x);
}

以下是我收到的错误消息:

gcc_vs_vs.cc(16) : error C2510: 'bbb' : left of '::' must be a class/struct/union
gcc_vs_vs.cc(17) : error C2146: syntax error : missing ';' before identifier 'foo'
gcc_vs_vs.cc(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
gcc_vs_vs.cc(17) : error C2143: syntax error : missing ',' before '&'

0 个答案:

没有答案