這跟在yesterday's question之後,我給了一些Visual Studio 2013無法處理的C++代碼,並且@ galop1n提供了一種解決方法,該解決方案對於這種情況非常合適。但是現在我已經走得更遠了,Visual Studio再次讓我感到悲傷。更多依賴類型與可變參數模板
template <typename T>
using ValueType = typename T::value_type;
template<typename... Containers>
void
foo(const Containers &...args) {
std::tuple<ValueType<Containers>...> x;
}
template<typename... Containers>
struct Foo {
std::tuple<ValueType<Containers>...> x;
};
每當我嘗試實例或者函數模板FOO或類模板富,我得到這兩個消息:
Test.cpp的(21):錯誤C3546: '...':有可用來擴大
和
Test.cpp的(21)無參數包:錯誤C3203: '值類型':unspecia lized別名模板不能被用作模板參數「_types」模板參數,預期一個實數型
在每種情況下(實例FOO或實例化的Foo),這兩個消息指向限定「X線」。
更新:我的Microsoft bug report現在有(在其附件中)此問題的所有基本變體。所以這將是一個觀看修復的地方。
人,你只是在吸地,再一次,*雙向*工作在我的Mac鐺完美無瑕(鐺-500.2.79 )(基於LLVM 3.3svn)。啊。我沒有VS2013啓動並運行,因此請保存一些輸入內容並告訴我,VS2013是否支持模板參數?如果是這樣,可能會有另一種解決方法(至少從我這裏,其他人可能也有其他想法)。編輯:從頭開始,不會如何工作。呸。 – WhozCraig
也許可以使用經典的元函數而不是類型別名。 'template struct value_type {typedef typename T :: value_type type; };' –
pmr
@pmr,您可以在模板類中使用typedef來定義「type」,這與容器定義「value_type」的方式相同;所以應用程序代碼訪問你的「類型」的問題基本上是同樣的問題,對吧? – slyqualin