Как распечатать неструктурные результаты функций constexpr во время компиляции с помощью clang++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как распечатать неструктурные результаты функций constexpr во время компиляции с помощью clang++?

Сообщение Anonymous »

Я пишу код constexpr и хотел бы проверить вычисленные значения во время компиляции.
Обычный трюк — сделать что-то вроде этого:

Код: Выделить всё

struct ReturnValue
{
int value1;
int value2;
};

constexpr ReturnValue doTheComputation()
{
return { .value1 = 10, .value2 = 20 };
}

template< auto t > struct p;

p< doTheComputation() > foo;
Это дает приятную ошибку компиляции:

Код: Выделить всё

implicit instantiation of undefined template 'p'
и я могу увидеть значение результата.
Однако это не работает для неструктурных типов, таких как std::string_view< /code>, std::string или что-либо похожее на строку, поскольку такие типы не могут быть NTTP.
Неработающий пример с std::string_view : https://godbolt.org/z/da8W557nK
Нерабочий пример с char const *: https://godbolt.org/z/ 5Mvqfx95q
Даже если я использую char const[ some_large_numer ], чтобы убедиться, что сообщение подходит, например, вместо строки, я получаю значения ASCII, перечисленные в качестве параметров шаблона:< /p>

Код: Выделить всё

implicit instantiation of undefined template 'p
Есть ли какие-нибудь советы или рекомендации по печати значений неструктурных типов во время компиляции (как результаты функций constexpr)?
Я' Я видел неофициальный патч для GCC, который, очевидно, решает эту проблему (я его не тестировал), но я ищу решение для clang (Apple-clang из Xcode 15 или новее и LLVM 18 или новее).

Подробнее здесь: https://stackoverflow.com/questions/786 ... -time-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»