这是一口,所以这里以一段代码为例:
template<typename T>
void foo(const T& a, typename T::value_type::value_type b) { }
std::vector<std::vector<int>> vec;
foo(vec, 4); // Error, can't specialize function template
这可以使用 gcc 正确编译和运行。由于上述原因,它不能使用 Visual Studio 2010 进行编译。但是,如果 finalvalue_type
带有template
关键字前缀,它将正确编译和运行。我对为什么有一些猜测,但找不到标准的相关部分。
template<typename T>
void foo(const T& a, typename T::value_type::template value_type b) { }
std::vector<std::vector<int>> vec;
foo(vec, 4); // Compiles and runs correctly with Visual Studio 2010
我知道上面的用法template
是 Visual Studio 扩展,但是标准对使用这样的类型有什么看法?gcc 对代码的接受也是一种扩展,还是 Visual Studio 的缺陷?