#include <type_traits>
int main()
{
std::is_constructible_v<int&, const int&>; // false, as expected.
std::is_copy_constructible_v<int&>; // true, NOT as expected!
}
Согласно cppref :
Если T является объектом или ссылочным типом и определением переменной T obj (std :: declval () ...);правильно сформирован, обеспечивает постоянное значение члена, равное true.Во всех остальных случаях значение равно false.
std::is_copy_constructible_v<int&>
должно давать тот же результат, что и std::is_constructible_v<int&, const int&>
;однако clang 7.0
дает другие результаты, как показано выше.
Соответствует ли это поведение стандартам C ++?