@Aconcagua - Большое спасибо. Я ужасно неэффективен с багзиллой GCC.
ытался скомпилировать этот код C ++ под GCC 8.2 с различными параметрами, и он всегда успешно выполняется, не выдает предупреждений и выводовtrue
:
int && a = 123;
decltype(auto) b = a;
std::cout << std::boolalpha << std::is_same<decltype(b), int&>::value;
Между тем, тот же код не будет компилироваться в Clang, и, если я правильно понимаю стандарт, это поведение, соответствующее стандарту.
cppreference наdecltype
:
Если аргумент является не выраженным в скобках id-выражением или не заключенным в скобки выражением доступа к члену класса, тогда decltype возвращает тип объекта, названного этим выражением.
cppreference наdecltype(auto)
:
Если объявленным типом переменной является decltype (auto), ключевое слово auto заменяется выражением (или списком выражений) его инициализатора, и фактический тип определяется с использованием правил для decltype.
Следовательно,decltype(auto)
должен уступитьint&&
, И с тех порa
это значение, оно не должно связываться сb
, что приводит к ошибке компиляции.
Так что GCC не соответствует стандарту или мне чего-то не хватает?