@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 не соответствует стандарту или мне чего-то не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос