2012-08-04 63 views
1
typedef std::chrono::duration<int, std::ratio_multiply<std::ratio<12, 34>, std::ratio<9>>> irrelevant; 

void func(irrelevant){} // comment this out to make it work 
void func(std::chrono::seconds){} 
void func(std::chrono::minutes){} 

int main() 
{ 
    func(std::chrono::seconds(43)); 
} 

以上,列入接受一個irrelevant過載導致一堆錯誤,如:重載一個函數,一個時辰::持續時間

「的std :: ratio_divide < _R1,_R2 > ::型」不是一個基類中的一員‘的std :: ratio_divide < _R1,_R2>’

是否有實際的東西錯了,或者是VS2012惹的禍?我該如何解決它?

回答

4

我沒有獲得VS2012,但看到如果這個工程:對我來說在

typedef std::chrono::duration<int, std::ratio_multiply<std::ratio<12, 34>, std::ratio<9> >::type> irrelevant; 

你的代碼編譯C++ 11的模式,但不是在C++ 03模式(鐺/ + +的libc )。我的理論是,VS2012還沒有實現模板別名,或者它的<chrono>還沒有對模板別名的可用性做出反應。作爲回退,ratio_multiply有一個嵌套類型type應該做這項工作。

+3

「*我的理論是,VS2012尚未實現模板別名*」這是正確的。 – ildjarn 2012-08-04 17:11:34

+0

':: type'工作,謝謝! – David 2012-08-04 18:02:31