2017-01-03 7 views
3
#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 Yuse namespace std;にしたくない

。次にをnamespace Yに表示するにはどうすればよいですか。あなたは、すべてのクロノリテラルを持っているしたい場合は、あなただけの、あなたが

using std::chrono_literals::operator""s; 

がいることを、少なくとも上coliru gccの問題に注意してください使用することができますoperator""sをしたい場合は

答えて

4

あなたは

using namespace std::chrono_literals; 

使用することができます上記の行を警告するが、clangはそうではない。私には警告はありません。私はこれに関する質問に従いました。Should a using command issue a warning when using a reserved identifier?

+0

私はあなたが最初のものを使うのにネームスペース...;が必要だと思う、第2のものはg ++の警告を出します。 – Holt

+0

@Holtこれはgccバグだと思う。はい、それは予約された名前ですが、私たちはそれを定義していないので、それを使用するだけで大​​丈夫です。私はちょうどそのことについてのメモを追加した。そしてclangは警告しない。 – NathanOliver

+0

これは 'using namespace std :: chrono_literals;'として使われることを意図しています。 'literal ::'部分は冗長です。 –

関連する問題