【发布时间】:2016-04-08 09:21:18
【问题描述】:
在 GCC 4.9.2 中,以下代码无法编译:
#include <chrono>
#include <string>
using namespace std::literals::string_literals;
using namespace std::literals::chrono_literals;
template<typename T>
struct S
{
S()
{
"hello"s;
}
};
int main()
{
S<int> s;
}
给予errors,开头为:
error: no matching function for call to 'operator""s()'
如果我注释掉chrono_literals 行没有错误,非模板类也没有错误。
我认为这是一个 gcc 4.9 错误,因为相同的代码在 GCC 5 和 clang 中工作。我的问题是:有没有一种解决方法可以让我在这个编译器版本的模板中同时使用 std::string 文字和 chrono 文字?
例如,我可以在其中一个标准标头中编辑的内容,或者我可以在我的代码中全局执行的内容?
注意:此编译器版本没有隐含的using namespace std::literals::chrono_literals,因为 C++ 标准似乎要求这样做;这也是在 GCC 5 中添加的。
【问题讨论】:
-
您是否需要在顶层设置
using?你需要在同一个函数中使用两者吗?范围相同?
标签: c++ gcc chrono compiler-bug