以下内容无法在 GCC 4.8.1 上编译:
//struct Tag {}; // Program compiles if I use this.
template <typename T>
struct Base {
struct Tag {};
Base(Tag) {}
};
template <typename T>
struct Derived : Base<T> {
Derived(Tag tag) : Base<T>(tag) {}
// Derived(Base<T>::Tag tag) : Base<T>(tag) {}
};
int main() {}
在 'tag' 之前抱怨 [Error] 预期的 ')'。虽然它在 Visual Studio 2013 上编译,但我想知道 VS2013 是否正确接受它。Tag
当我在外部声明时它会编译Base<T>
,但我想在它所属Tag
的地方声明。Base<T>
使用Derived(Base<T>::Tag tag) : Base<T>(tag) {}
也没有帮助。解决上述问题的任何方法,以便两个编译器都接受这一点,同时保留Tag
在Base<T>
.