2014-02-06 95 views
3

您能看到這個函數聲明有什麼問題嗎?可變類型與可變參數模板

template<typename... Containers> 
std::tuple<typename Containers::value_type...> 
foo(const Containers &...args); 

當我嘗試調用它,就像這樣:

foo(std::list<int>(), std::vector<float>()); 

MSVC2013說error C2027: use of undefined type 'std::tuple<Containers::value_type>

我試着用「遲到」語法重寫函數聲明,它沒有任何區別。

有什麼辦法可以實現這段代碼試圖做什麼?

+5

你忘了'#包括'也許? – chris

+0

不,我明白了。 – slyqualin

回答

4

您贏得填寫微軟錯誤報告的權利connect ...代碼在clang和gcc上沒問題。

在VS2013一種解決方法,也許gcc的4.7:

template <typename T> 
using ValueType = typename T::value_type; 

template<typename... Containers> 
std::tuple<ValueType<Containers>...> 
foo(const Containers &...args) { return {}; } 
+0

不在我的gcc版本上。你在用哪個?我在gcc 4.7.2上發現了一個奇怪的錯誤,要求我提交一個錯誤報告。 – JorenHeit

+0

g ++ 4.8.2,C++ 11實際上不像老版本那樣穩定C++和編譯器快速發展http://coliru.stacked-crooked.com/a/e554d0c9b837df67 – galop1n

+0

是的,我知道。我以前有過高級模板和4.7.2的問題,但是我的發行版在其存儲庫中沒有4.8.x ... – JorenHeit