我已经写了下面的代码(使用typedef),其中compiles与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的另一个bug还是程序格式良好?
1条答案
按热度按时间f4t66c6m1#
给定的程序是病态的,因为如果一个函数类型有引用限定符,那么我们不能按照dcl.ref创建对该函数类型的引用:
[Note 4:**如果函数类型具有cv限定符或ref限定符,则形成对函数类型的引用是病态的;**见[dcl.fct]。- 尾注]
由于
type1=int(int)&
是一个带有引用限定符的函数类型,我们不能像在type2
中那样创建对type1
的引用。因此,这里的 *msvc是错误的 *。