fmt:编译时字符串格式检查不起作用

Posted

技术标签:

【中文标题】fmt:编译时字符串格式检查不起作用【英文标题】:fmt: Compile-time string format check doesn't workfmt:编译时字符串格式检查不起作用 【发布时间】:2019-08-21 01:01:23 【问题描述】:

我正在尝试使用 fmt 5.3.0(仅限标头)对编译时进行格式字符串检查。

$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
#define FMT_HEADER_ONLY
#define FMT_STRING_ALIAS 1

#include <fmt/format.h>

int main()
  std::string s = format(fmt("2"), 42);
  return 0;


$ g++ -I../include -std=c++11 test.cpp ...什么都没有

根据 fmt 自述文件,这应该会产生错误 (https://github.com/fmtlib/fmt)。

【问题讨论】:

【参考方案1】:

编译时检查需要足够的 constexpr 支持。 g++ 5.4 and c++ 11 不会有编译时检查,但 g++ 6.1 and c++ 14 会有。另见FMT_USE_CONSTEXPR的定义。

【讨论】:

谢谢!这工作:安装g++-6:gist.github.com/zuyu/7d5682a5c75282c596449758d21db5edg++-6 -I../include -std=c++14 test.cppcontext_.on_error("argument index out of range");

以上是关于fmt:编译时字符串格式检查不起作用的主要内容,如果未能解决你的问题,请参考以下文章

子字符串编译但代码不起作用[关闭]

rake assets:precompile 在本地编译时不起作用

IDEA的debug不起作用的几个解决办法

Visual Studio Ctrl K + D(代码格式化)不起作用

Visual Studio Ctrl K + D(代码格式化)不起作用

检查数组是不是具有特定字符,为啥我的代码不起作用?