2017-05-04 12 views

cevap

7

:

static constexpr bool i = get_data<Topt>(); 
static constexpr auto j = get_data<Topt>(); 

Topt (yani, opt olan) henüz tamamlanmadı. Yani is_detected_v<has_data_t, opt>, false olmalıdır. Ama zaman biz opttam olduğunu main olsun. Ve böylece is_detected_v<has_data_t, opt>'un true olmasını bekliyoruz. farklı bağlamlarda örneği oluşturulan farklı sonuçlar verdiğine bir şablon olması

programınızı gerekmez teşhis, kötü oluşturulduğunu ifade eder. [Temp.point] bakınız: herhangi bir şablon için

bir uzmanlık birden çok çeviri birimlerinde örnekleme noktaları olabilir. Eğer iki farklı örnekleme noktası bir tanım özelliğine göre bir şablon uzmanlığı farklı anlamlar verirse, program kötü biçimlendirilmiş, teşhis gerektirmez.

j eklenmesi gerçekten önemli değil - sadece derleyici şeyler örneğini seçti yolu sırasını değiştirdi anahtarı çevirmek oldu. Program, j'un varlığından bağımsız olarak kötü biçimlendirilmiştir.

+1

Burada hangi isim bağımsız değil? –

+0

@ T.C Hm. Notlardaki bu örneklerin hiçbiri burada geçerli değil mi, yoksa bu tamamen yanlış metin mi? Oldukça emin örnek, bir sebepten dolayı ndr kötü biçimlendirilmiş. – Barry

+0

Bence [\ [temp.point \]/8] (http://eel.is/c++draft/temp.point#8) daha uygundur. – cpplearner