【发布时间】:2018-04-24 13:49:18
【问题描述】:
在cppref,我发现一个奇怪的C++代码,它在源代码中使用了一个非ascii字符,如下:
template <char...> double operator "" _π(); // OK
但是,上面的代码不能用clang 6.0编译。错误信息是:
error : source file is not valid UTF-8
1>double operator "" _<A6><D0>()
1> ^
我的问题是:
- 这符合 C++17 吗?
- 注意自定义
_π是没有参数的,那么_π怎么用呢?只需使用double var = _π;?
【问题讨论】:
-
我认为这里的关键元素是
<char...>将表示与文字一起使用的字符集,它基本上取代了参数。所以2.5_π;会使用模板参数<'2','.','5'>调用operator "" _π()。 -
pi 字符可以正常工作ideone.com/6AGIX0 你使用的是什么环境(操作系统、shell)? A6D0 看起来不像 pi 的有效 UTF-8 编码。
-
A6 D0 不是 UTF-8 序列。检查您的编辑器或 IDE 以确保您将源文件保存为 UTF-8。
标签: c++ compiler-errors standards c++17 user-defined-literals