C++ 为什么';t C++;最后草稿允许一个类型;“无例外功能”;与类型兼容的引用;无异常函数“;?

C++ 为什么';t C++;最后草稿允许一个类型;“无例外功能”;与类型兼容的引用;无异常函数“;?,c++,reference,language-lawyer,c++17,C++,Reference,Language Lawyer,C++17,例如,请参见: 给定类型“cv1 T1”和“cv2 T2”,“cv1 T1”与 “cv2 T2”如果T1与T2的类型相同,或者T1是T2的基类。“ “cv1 T1”是与“cv2 T2”兼容的参考,如果 T1是与T2相关的参考,或 T2为“无异常功能”,T1为“功能”,其中功能类型在其他方面相同 而cv1与cv资格相同或更高 比,cv2。在参考相关的所有情况下,或 使用两种类型的引用兼容关系来建立 引用绑定的有效性,T1是T2的基类,a 如果T1是一个函数,则需要这种绑定的程序是格式错误的 不

例如,请参见:

给定类型“cv1 T1”和“cv2 T2”,“cv1 T1”与 “cv2 T2”如果T1与T2的类型相同,或者T1是T2的基类。“ “cv1 T1”是与“cv2 T2”兼容的参考,如果

  • T1是与T2相关的参考,或
  • T2为“无异常功能”,T1为“功能”,其中功能类型在其他方面相同
而cv1与cv资格相同或更高 比,cv2。在参考相关的所有情况下,或 使用两种类型的引用兼容关系来建立 引用绑定的有效性,T1是T2的基类,a 如果T1是一个函数,则需要这种绑定的程序是格式错误的 不可访问(子句[class.access])或不明确 T2的基类([class.member.lookup])

我可能遗漏了什么,但我对上面第二个要点的理解告诉我,“noexcept函数”(T2)不应该绑定到“noexcept函数”(T1)类型的引用。但是下面的代码段是在和g++中编译的


您的示例引用中的类型是否相关(相同),从而满足第一个要点?@Columbo Good catch,tks.无法复制,因为引用的段落显然允许它。另外,这不是C++14。@t.C.它允许它是因为第一个要点,而不是因为第二个,正如Columbo准确地告诉我的那样。另外,我选择了
C++1z
,但不知怎的,它被C++14取代了。我不知道为什么!
int g(int) noexcept;
int (&rg)(int) noexcept = g;