Обычный трюк — сделать что-то вроде этого:
Код: Выделить всё
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
Я' Я видел неофициальный патч для GCC, который, очевидно, решает эту проблему (я его не тестировал), но я ищу решение для clang (Apple-clang из Xcode 15 или новее и LLVM 18 или новее).
Подробнее здесь: https://stackoverflow.com/questions/786 ... -time-with