2017-01-03 32 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」類型「無符號長長」或「爲const char *」的 參數並且沒有 匹配文字運算符模板 std :: chrono :: seconds d = 0s;

我的問題是:

我不想在namespace Yuse namespace std;;那麼,我應該如何在namespace Y中顯示std::operator""s

回答

4

如果你想擁有所有計時文字,那麼你可以使用

using namespace std::chrono_literals; 

如果你只是想operator""s那麼你可以使用

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

請注意,至少在coliru GCC問題上述線路的警告,但鐺沒有。對我來說,不應該有任何警告。我已經問過關於這個的後續問題Should a using command issue a warning when using a reserved identifier?

+0

我認爲你需要'使用命名空間...;'爲第一個,第二個在g ++上發出警告。 – Holt

+0

@Holt我認爲這是一個海灣合作委員會的錯誤。是的,它是一個保留名稱,但我們沒有定義它,只是使用它,所以它應該沒問題。我剛剛添加了一個關於這個的記錄,那個叮噹聲並沒有警告。 – NathanOliver

+0

這意味着用作'使用命名空間std :: chrono_literals;'。 'literals ::'部分是多餘的。 –