簡體   English   中英

使用模板類的成員實例化MSVC ++中的模板默認參數

[英]Using member of template class to instantiate template default parameter in MSVC++

下面的代碼是我試圖從GCC / G ++移植到Microsoft Visual C ++ 2010的大型項目的簡化示例。它可以在G ++上很好地編譯,但是在MSVC ++上,它會引發錯誤,並且我很難理解為什么。

template <typename A, typename B = typename A::C::D>    // line 1
struct foo
{
  typedef int type;
};

template <template <typename> class E, typename T>
typename foo<E<T> >::type                               // line 8
bar(){}

來自MSVC ++的錯誤消息是:

example1.cpp(1) : error C2027: use of undefined type 'E<T>'
example1.cpp(8) : error C2146: syntax error : missing ',' before identifier 'D'
example1.cpp(8) : error C2065: 'D' : undeclared identifier

我嘗試了一些更改來縮小問題的范圍,雖然我不太了解,但是發現的是:如果在第1行中,我將A::C::D替換為A::C ,效果很好。 如果我更換template <typename> class E只用typename E並作出foo<E>它工作正常。 如果像這樣在第8行中顯式指定foo的第二個模板參數,則效果很好:

typename foo<E<T>, typename E<T>::C::D>::type          // line 8

而且,如果我在第1行中將A::C::D替換為無害的名稱,例如typename B = A ,但添加另一種使用A::C::D作為typedef typename A::C::D qux; 按照foo的定義,也可以正常工作。

有任何想法嗎? 我缺少什么C ++規則?

根據jpalecek的建議,我將其報告為Microsoft的錯誤,並且Microsoft已確認這確實是其編譯器中的錯誤:

https://connect.microsoft.com/VisualStudio/feedback/details/576196

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM