2014-12-27 21 views
5

Ben iç içe-ad-teknik uzmanların tanımlanan enum anlamaya çalışıyorum kullanarak tanıtıldı Enum. Ne standart diyor N4296:7.2/4 [dcl.enum] geçerli: enum anahtar yuvalanmış-name-belirtici takip edilirsebeyanı

, enum-belirteci sınıf veya ad alanına doğrudan beyan önceden bulunan bir numaralandırma atıfta bulunacaktır ki iç içe isim belirteci gelir (yani ne kalıtsal ne de kullanılarak beyanına ile kişiye), enum-belirteci önceki beyan kuşatan bir ad görünür olacaktır.

O zaman, neden, aşağıdaki örnekte çalışır? namescape C olarak

DEMO

#include <iostream> 

namespace A 
{ 
    namespace B 
    { 
     enum E : int; 
    } 
} 
namespace C 
{ 
    using A::B::E; 
} 

enum C::E : int { x = 2 }; 

int main() 
{ 
} 

biz bildirimi kullanarak enum E ilan ve enum tanımı ile kendisine gönderilen. Derleyici bir hata atmış olabilir, ama yapmadı. Neyin yanlıştı, yanlış anlaşılma neredeydi?

+3

görünüyor. –

+0

@ T.C. Yani, genel olarak aşağıdaki kod da http://coliru.stacked-crooked.com/a/b4e682437a639a1b çalışmamalı? –

+0

@ T.C. Mirastan bir örnek olamaz mıydın? kodun sizin ikinci setinde –

cevap

2

Belli ki vermek nedenlerle, bu bir derleyici hatasıdır.
İlginçtir, Clang 3.5.0 ve GCC 4.9 hem programı kabul. Eğer bir derleyici hata buldum gibi