Derlemenin bir bölümünü içeren büyük bir proje üzerinde çalışıyorum - ama nasıl olduğunu anlamıyorum. dolayısıyla dairesel olduğunu ... kendisi First<Traits>
dayalı bir typedef
olan Two
dayalı bir typedef
olanBu şablon kodu neden derleniyor?
template <typename T>
struct First {
typedef int type; // (A)
typename T::Three order; // (B)
};
template <typename T> struct Second {
typedef typename T::type type;
};
template <typename T> struct Third {
int val;
T two;
};
struct Traits {
typedef First<Traits> One;
typedef Second<One> Two;
typedef Third<Two> Three;
};
int main(int argc, char** argv) {
Traits::One x;
};
sınıf First
Traits
ve referanslar Traits::Three
, üzerinde şablon edilir: Bu basit örnekte için aşağı damıtılmış . Ancak bu kod hem gcc4.6 hem de VC10'da iyi derler. Ancak, (A)
ve (B)
işaretli iki satırın sırasını değiştirirseniz, kod 'un Second
'un içinden şikayetçi olmaz.
Bu kod neden derleniyor ve bu nedenle neden typedef
ve üye değişkeninin sıralaması önemlidir?
deneyin ağaçta kağıda bu şekilde çizmek için: Her tanımı için bir düğüm yapın ve ardından her biri için (ileri) türleri bildirim ve için tam bir tanım ihtiyacı vardır ve bir ihtiyacı olan hangi kenarlarını çizin sadece beyan, ve bunun dairesel olmayacağını göreceksiniz. – PlasmaHH
Merhaba - ilgisiz, ama P0704 17 karşı karşı bir DR olup olmadığını biliyor musunuz? –
@Kerrek Hiçbir fikrim, böyle şeylerin nasıl karar verildiğini bile bilmiyorum. – Barry