Программы на C++. Форум разработчиков
Anonymous
CTAD для шаблона псевдонима
Сообщение
Anonymous » 03 дек 2025, 00:09
Код: Выделить всё
template
class PtrC {
public:
constexpr PtrC(const T* const p) : ptr{p} {}
constexpr auto getMutable() requires(not IsConst) {
return const_cast(ptr);
}
public:
const T* ptr;
};
template
PtrC(T* const) -> PtrC;
template
PtrC(const T* const) -> PtrC;
template
using Ptr2PtrC = PtrC;
auto main() -> int {
Ptr2PtrC ptr2ptrc{new int* const{nullptr}};
}
Этот код компилируется с GCC 15.2, но отклонен Clang 21.1.0
Что правильно и почему?
Как в моем случае работает CTAD для второго параметра шаблона — Const?
Как преобразуются направляющие вывода для шаблона псевдонима?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... s-template
1764709763
Anonymous
[code]template class PtrC { public: constexpr PtrC(const T* const p) : ptr{p} {} constexpr auto getMutable() requires(not IsConst) { return const_cast(ptr); } public: const T* ptr; }; template PtrC(T* const) -> PtrC; template PtrC(const T* const) -> PtrC; template using Ptr2PtrC = PtrC; auto main() -> int { Ptr2PtrC ptr2ptrc{new int* const{nullptr}}; } [/code] Этот код компилируется с GCC 15.2, но отклонен Clang 21.1.0 [list] [*]Что правильно и почему? [*]Как в моем случае работает CTAD для второго параметра шаблона — Const? [*]Как преобразуются направляющие вывода для шаблона псевдонима? [/list] Подробнее здесь: [url]https://stackoverflow.com/questions/79836322/ctad-for-alias-template[/url]