我已经编写了以下代码(使用 typedef),它使用 Microsoft Visual Studio 进行编译,但不能使用 gcc 和 clang 进行编译。
using type = int(int)&;
using type2 = type&; //compiles with msvc but rejcted in gcc and clang
Gcc 说
cannot declare reference to qualified reference type
但 msvc 接受它。
这是 msvc 的另一个错误还是程序格式正确?
给定的程序是病态的,因为如果一个函数类型有引用限定符,那么我们不能按照 dcl.ref:
创建对该函数类型的引用[注 4:如果函数类型具有 cv 限定符或 ref 限定符,则形成对函数类型的引用是格式错误的; 参见 [dcl.fct]。 ——尾注]
并且由于
type1=int(int)&
是具有引用限定符的函数类型,我们无法像您在 type1
中尝试的那样创建对 type2
的引用。
因此,msvc在这里是错误的。