LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Здесь во время компиляции форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции. Это и есть работа макроса.

В С++20 точно также форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции.

Только используется для этого consteval.

consteval теперь макрос?

<source>:36:26: error: call to consteval function 'basic_format_string<char, char [18]>::basic_format_string<5>' is not a constant expression
  std::string s = format("{:d}", "I am not a number");
                         ^
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:1422:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
    handler.on_error("invalid type specifier");

C++20 Defect Report: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html

Тут надо в терминологии разобраться

Да, это сложно. Я не знаю. У меня только есть вопрос, почему авторы языков применяют другие названия, например mixin, а не макрос?

https://dlang.org/articles/mixin.html

Исправление fsb4000, :

Здесь во время компиляции форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции. Это и есть работа макроса.

В С++20 точно также форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции.

Только используется для этого consteval.

consteval теперь макрос?

<source>:36:26: error: call to consteval function 'basic_format_string<char, char [18]>::basic_format_string<5>' is not a constant expression
  std::string s = format("{:d}", "I am not a number");
                         ^
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:1422:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
    handler.on_error("invalid type specifier");

C++20 Defect Report: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html

Тут надо в терминологии разобраться

Да, это сложно. Я не знаю, у меня только есть вопрос, почему авторы языков применяют другие названия, например mixin, а не макрос?

https://dlang.org/articles/mixin.html

Исправление fsb4000, :

Здесь во время компиляции форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции. Это и есть работа макроса.

В С++20 точно также форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции.

Только используется для этого consteval.

consteval теперь макрос?

<source>:36:26: error: call to consteval function 'basic_format_string<char, char [18]>::basic_format_string<5>' is not a constant expression
  std::string s = format("{:d}", "I am not a number");
                         ^
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:1422:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
    handler.on_error("invalid type specifier");

C++20 Defect Report: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html

Исправление fsb4000, :

Здесь во время компиляции форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции. Это и есть работа макроса.

В С++20 точно также форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции.

Только используется для этого consteval.

consteval теперь макрос?

<source>:36:26: error: call to consteval function 'basic_format_string<char, char [18]>::basic_format_string<5>' is not a constant expression
  std::string s = format("{:d}", "I am not a number");
                         ^
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:1422:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
    handler.on_error("invalid type specifier");

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html

Исходная версия fsb4000, :

Здесь во время компиляции форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции. Это и есть работа макроса.

В С++20 точно также форматирующая строка разделяется на токены и если формат неверный, то будет ошибка компиляции.

Только используется для этого consteval.

consteval теперь макрос?