应用于“const char* const&”和“char* &”的三元运算符的返回类型是什么?

康桓瑋*_*康桓瑋 9 c++ conditional-operator language-lawyer

考虑以下无用的代码片段,它在不同的编译器中给出不一致的结果(演示

\n
#include <type_traits>\n\nchar* dummy;\nconst char* const& a = dummy;\n      char*      & b = dummy;\nusing T = decltype(true ? a : b);\nstatic_assert(std::is_same<const char* const&, T>::value); // pass in Clang and MSVC:c++20\nstatic_assert(std::is_same<const char*       , T>::value); // pass in GCC   and MSVC:c++17\n
Run Code Online (Sandbox Code Playgroud)\n

GCC认为T存在const char*于C++的所有版本中,而Clang认为存在const char* const&于所有版本中;MSVC 认为Tconst char*C++17 和const char* const&C++20 下。

\n

从语言律师\xe2\x80\x99s的角度来看,我应该相信哪个编译器?

\n