C++ gcc错误的解决方法:在模板中使用chrono_文本会中断字符串_文本

C++ gcc错误的解决方法:在模板中使用chrono_文本会中断字符串_文本,c++,gcc,chrono,compiler-bug,C++,Gcc,Chrono,Compiler Bug,在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; } }; in

在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;
}
如果注释掉
chrono\u literals
行,则不会出现错误,对于非模板类也不会出现错误


我认为这是一个GCC4.9错误,因为相同的代码在GCC5中工作,并且叮当作响。我的问题是:是否有一种变通方法可以让我在这个编译器版本的模板中同时使用std::string文本和chrono文本

例如,我可以在一个标准标题中编辑某些内容,或者我可以在代码中全局执行某些内容


注意:这个编译器版本没有使用命名空间STD::文字::CeaOxi文字< /COD>作为C++标准的命令;这也被添加到GCC 5中。

如果您不需要在同一范围内同时使用这两个,那么只需在需要的地方使用

否则,我会根据重新实现自己的字符串文本,并将它们称为不同于
s
(无论如何,您都会收到警告)。。。说
\u s
。当然,您也可以实现自己的功能,但这些功能似乎更为复杂

#include <string>   
#include <chrono>


inline std::basic_string<char>
operator""_s(const char* __str, size_t __len)
{ return std::basic_string<char>{__str, __len}; }


template<typename T>
struct S
{
    S()
    {
        {
            using namespace std::literals::chrono_literals;
            10s;
            "hello"_s;
        }
        {
            using namespace std::literals::string_literals;
            "hello"s;
        }
    }
};

int main()
{
    S<int> s;
}
#包括
#包括
内联标准::基本字符串
运算符“”\u s(常量字符*\u字符串,大小\u长度)
{return std::basic_string{{uu str,{uu len};}
模板
结构
{
S()
{
{
使用名称空间std::literals::chrono_literals;
10秒;
“你好”;
}
{
使用名称空间std::literals::string_literals;
你好;
}
}
};
int main()
{
S S;
}

您需要在顶层使用
吗?您是否需要在同一个函数中同时使用这两个函数?同样的范围?
#include <string>   
#include <chrono>


inline std::basic_string<char>
operator""_s(const char* __str, size_t __len)
{ return std::basic_string<char>{__str, __len}; }


template<typename T>
struct S
{
    S()
    {
        {
            using namespace std::literals::chrono_literals;
            10s;
            "hello"_s;
        }
        {
            using namespace std::literals::string_literals;
            "hello"s;
        }
    }
};

int main()
{
    S<int> s;
}