В 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;
}
выдает ошибки, начинающиеся с:
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
на верхнем уровне? Вам нужно использовать оба в одной и той же функции? Тот же объем? - person Dan Mašek   schedule 08.04.2016