2011-10-16 23 views
12

Xem xét việc này mộtCác thành viên "enum class" có được khởi tạo ngay lập tức hay muộn hơn khi được sử dụng không?

template<typename T> 
struct A { 
    enum class X { 
    V = T() 
    }; 
}; 

Đối với các lớp học thành viên và các hàm thành viên, C++ 11 (và C++ 03) sẽ không nhanh chóng định nghĩa của họ trừ khi chúng ta sử dụng chúng trong một cách mà đòi hỏi định nghĩa của họ. Điều này có đúng với enum class không?

// valid? 
A<std::string> a; 

Thật không may, tôi không thể kiểm tra trình biên dịch vì C++ 11 sắp hết và mọi thứ chưa đáng tin cậy.

+0

Tôi không nghĩ rằng 'A a;' là hợp lệ trừ khi 'std :: string' có thể được chuyển đổi hoàn toàn thành' int'. Nhưng sau đó một lần nữa ... – Florian

Trả lời

10

Tôi nghĩ vậy. 14.7.1/1

Các instantiation tiềm ẩn của một lớp mẫu chuyên môn làm cho tiềm ẩn instantiation của tờ khai, nhưng không phải của các định nghĩa hoặc mặc định lập luận, trong [...] scoped enumerations viên

+1

Cảm ơn! Được báo cáo là http://llvm.org/bugs/show_bug.cgi?id=10044 và http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49224. –

Các vấn đề liên quan