Код: Выделить всё
#include
#include
#include
static constexpr std::array static_array = {1, 2, 3, 4, 5};
template
constexpr int ExtractInt() {
return *test;
}
template
requires(Index < 5)
constexpr void Get(std::array& array) {
array[Index] = ExtractInt();
}
template
requires(sizeof...(Indices)
В моем сложном случае замена указателя на ссылка и внесение необходимых изменений, он компилируется и работает правильно, но в приведенном мной примере MSVC вообще не нравится это изменение, тогда как GCC и clang им вполне довольны.
Я нужен какой-то сложный способ создания std::string_view во время компиляции, который не является представлением другого std::string_view, например, преобразование записей Unicode, поступающих со строкой json, или применение escape-символа и т. д., поэтому мне нужно было сделать в этой ситуации приводится несколько интересных взломов шаблонов.
Я знаю, что использование флага std::latest может быть не лучшей практикой, в моем коде я сильно полагался на std ::expected, поэтому мне это было нужно. Кроме того, все компиляторы ведут себя одинаково, будь то C++23 (последняя версия для MSVC) или C++20.
Подробнее здесь: [url]https://stackoverflow.com/questions/79327875/pointer-of-an-object-which-has-static-storage-as-template-non-type-parameter-cl[/url]