#include <chrono>
namespace X
{
using namespace std;
struct A
{
std::chrono::seconds d = 0s; // ok
};
}
namespace Y
{
struct B
{
std::chrono::seconds d = 0s; // error
};
}
エラーメッセージがある:[std :: operator "" s]を名前空間に表示させる方法は?
エラー:「演算子 『』 S」型の 引数での呼び出しに該当リテラル演算子「のunsigned long長い」又は「CONST文字*」、なし リテラル演算子テンプレートに一致する std :: chrono :: seconds d = 0;
私の質問は:私はnamespace Y
でuse namespace std;
にしたくない
。次にをnamespace Y
に表示するにはどうすればよいですか。あなたは、すべてのクロノリテラルを持っているしたい場合は、あなただけの、あなたが
using std::chrono_literals::operator""s;
がいることを、少なくとも上coliru gccの問題に注意してください使用することができますoperator""s
をしたい場合は
私はあなたが最初のものを使うのにネームスペース...;が必要だと思う、第2のものはg ++の警告を出します。 – Holt
@Holtこれはgccバグだと思う。はい、それは予約された名前ですが、私たちはそれを定義していないので、それを使用するだけで大丈夫です。私はちょうどそのことについてのメモを追加した。そしてclangは警告しない。 – NathanOliver
これは 'using namespace std :: chrono_literals;'として使われることを意図しています。 'literal ::'部分は冗長です。 –