Как распечатать неструктурные результаты функций 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Clang: переменная constexpr должна быть инициализирована постоянным выражением, но функция — constexpr
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • MacOS Clang Compiler выпуск (Apple Clang версия 17.0.0 (Clang-1700.0.13.5))))
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Является ли Clang-tidy '-Cecks = clang-analyzer-*' падение замены для сканирования и проверки Clang-Analyze?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Могут ли компиляторы C++ кэшировать результаты функций constexpr?
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ оценить набор функций constexpr во время компиляции на C++?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

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