編輯:我正在使用tdm-gcc-4.7.1-2 for Windows如何從模板化的基礎中消除多個繼承的typedefs?
不知道如何解決這個問題。我想用它作爲一種類型列表,讓我知道我正在嘗試使用B
的類型定義中不存在的類型。
template <typename T, typename U>
struct A {
typedef pair<T, U> type;
};
struct B : A<int, string>, A<int, float> {};
B::type foo; // won't compile, ambiguous reference, as expected
B::A<int, int>::type bar; // compiles fine?? :(
有沒有辦法得到它失敗的A<int, int>
(以及任何其他A
「不B
繼承S),或另一種方式來進行此事?我想我可以使用一個tuple
並緩解我的方式,對每個元素進行is_same
比較,無論我是否提供元函數,但這似乎更容易...首先:\
我懷疑'B ::一個 :: type'應該編譯在所有...'B :: A'已經是模糊的,不參照模板,但從中'B'導出實例... –
2013-02-08 22:49:34
@DavidRodríguez-dribeas我同意的一個,我不明白爲什麼它編譯。我可能錯過了埋在標準中的規則。 – 2013-02-08 22:57:53
我相信C++ 11草案中的章節是14.6.1-4。明確地允許這種情況 – jmetcalfe 2013-02-08 23:04:15