Что такое FTDecay в соответствии с C++23?
Код: Выделить всё
template
struct Decompose;
template
struct Decompose {
using Type = T;
};
template
using FTDecay = typename Decompose::Type;
FTDecay x = "Hello";
В текущих реализациях MSVC, Clang и GCC последняя строка выше генерирует сообщения об ошибках, в которых упоминается неправильно сформированный тип int (*)() & (демо). GCC говорит:
Код: Выделить всё
error: cannot convert 'const char*' to 'FTDecay' {aka 'int (*)() &'}
in initialization
P0172r0 говорит, что он неправильно сформирован (требуется диагностика) для формирования ссылки или указателя на отвратительный тип функции. В статье вводится этот термин; это означает тип функции, за которым следует квалификатор cv-ref. Соответственно, использование X = int (*)() &; отвергается всеми компиляторами (демо).
Подробнее здесь:
https://stackoverflow.com/questions/782 ... mpiler-bug