MSVC是否错误地处理依赖名称中的模板关键字?

知道我们必须在哪里以及为什么要放置templateandtypename关键字后,我惊讶地发现 MSVC接受以下代码:

struct foo {
    using bar = int;
};

template <typename T>
void quux() {
    T::template bar b;
}

int main() {
    quux<foo>();
}

根据我的理解, 的用法T::template bar b;是不正确的。声明的正确方法b是使用typename,如下所示:(typename T::bar b;而不是T::template bar b;)。template将意味着这bar是一个模板,但事实并非如此。

它是 MSVC 中的错误导致它接受不正确的代码,还是标准允许它并且 Clang 和 GCC 都没有以这种方式实现它(因此需要正确使用typename此处)?

以上是MSVC是否错误地处理依赖名称中的模板关键字?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>