Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ constexpr函数的const引用参数:gcc/msvc vs clang/icc_C++_Compiler Errors_C++14_Language Lawyer - Fatal编程技术网

C++ constexpr函数的const引用参数:gcc/msvc vs clang/icc

C++ constexpr函数的const引用参数:gcc/msvc vs clang/icc,c++,compiler-errors,c++14,language-lawyer,C++,Compiler Errors,C++14,Language Lawyer,我发现,使用常量引用参数调用constexpr静态方法会导致clang和icc出现错误“表达式不是整型常量”,但gcc或msvc()则不会: 若参数不是引用,那个么这些编译器中的任何一个都会编译代码。在这里谁是正确的/正确的?< /P> < P> C++标准评估了从参入常量表达式中引用类型的ID表达式(除非满足更多的约束,这不是本代码的情况)。p> 然而,gcc似乎忽视了这一规则。使用此简化函数可以获得相同的结果(gcc接受,clang拒绝): constexpr void ff(const i

我发现,使用常量引用参数调用constexpr静态方法会导致clang和icc出现错误“表达式不是整型常量”,但gcc或msvc()则不会:

若参数不是引用,那个么这些编译器中的任何一个都会编译代码。在这里谁是正确的/正确的?< /P> < P> C++标准评估了从参入常量表达式中引用类型的ID表达式(除非满足更多的约束,这不是本代码的情况)。p> 然而,gcc似乎忽视了这一规则。使用此简化函数可以获得相同的结果(gcc接受,clang拒绝):

constexpr void ff(const int &s) 
{  
  static_assert((s, true), "oops!"); 
}
所以问题与静态成员函数无关。我的解释是这是一个gcc错误

我没有检查msvc,可能那里的错误不同,但仍然是错误的

constexpr void ff(const int &s) 
{  
  static_assert((s, true), "oops!"); 
}