История изменений
Исправление 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, а не макрос?
Исправление 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, а не макрос?
Исправление 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
теперь макрос?