Указатель объекта, который имеет статическое хранилище в качестве нетипового параметра шаблона, Clang и GCC согласны, MSC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Указатель объекта, который имеет статическое хранилище в качестве нетипового параметра шаблона, Clang и GCC согласны, MS

Сообщение Anonymous »

Я работаю над домашним проектом на C++, где пытаюсь проанализировать json во время компиляции (json хранится в строке фиксированного размера, поэтому он известен во время компиляции). Учитывая, что это не самая простая вещь в мире с C++, мне пришлось тут и там проделывать странную магию шаблонов, и я обнаружил интересный случай. Вот минимальная репродукция:

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

#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]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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