MSVC и clang/gcc не согласны с тем, можно ли использовать два разных интегральных константы в тройном операторе (и, как следствие, имеют ли они common_type
):
#include <utility>
int main()
{
return false
? std::integral_constant<int, 1>()
: std::integral_constant<int, 2>();
}
Вышеупомянутый фрагмент компилируется в clang и gcc, но не в MSVC. Какое правильное поведение соответствует стандарту? И если это поведение clang/gcc, то каковы последовательности преобразования, используемые для вывода общего типа этих двух разных типов?