Почему работает new в шаблонной constexpr функции
Есть шаблон функции, помеченный constexpr
template <class T>
constexpr auto foo() {
return new int;
}
Вопрос: почему это работает? Стоить убрать шаблон и все (вполне закономерно, ведь new не может быть constexpr) перестает работать с ошибкой, что new не может быть вычислено на этапе компиляции
Ответы (2 шт):
Автор решения: αλεχολυτ
→ Ссылка
С шаблоном работает по той причине, что у шаблона функции могут быть специализации. Специализации при этом обязаны тоже быть constexpr, однако, тело у них может быть совершенно иным, т.е. не содержать чего-то неподходящего для constexpr, в данном случае new.
Автор решения: user7860670
→ Ссылка
Этот код не работает. new в constexpr разрешен только с С++20, и только при условии, что:
- используется глобальная функция аллокации (тут соблюдено)
- выделенная память освобождается там же (не соблюдено)