Yakın zamanda Andrei Alexandrescu'nun Modern C++ Tasarımını okumaya başladım. Derleme Zamanlı iddialar okuduktan sonra aşağıdaki kodu çalıştı:Modern C++'dan CompileTimeChecker Beklenildiği gibi çalışmıyor Tasarım
template<bool> struct CompileTimeChecker { CompileTimeChecker(...){}; }; template<> struct CompileTimeChecker<false>{}; #define STATIC_CHECK(expr, msg) \ {\ class ERROR_##msg{}; \ (void)sizeof(CompileTimeChecker<(expr)!=0>((ERROR_##msg()))); /*Line 1*/ } int main() { STATIC_CHECK(sizeof(char)>sizeof(int),TypeTooNarrow); /*Line 2*/ STATIC_CHECK(sizeof(char)<sizeof(int),TypeTooNarrow); /*Line 3*/ }
kod Hat 2'ye nedeniyle derlemek olmamalı, ama iyi derler. Ben
(void)(CompileTimeChecker<(expr)!=0>((ERROR_##msg()))); /*Line 1*/ }
veya
new CompileTimeChecker<(expr)!=0>((ERROR_##msg())); /* Line 1*/ }
için, Hat 1 değiştirirseniz beklenen işleri olarak. Anlamadım.
Tam çift (aynı kullanıcı): [CompileTimeChecker, Modern C++ Tasarımından beklendiği gibi çalışmıyor.] (Http://stackoverflow.com/questions/3934643/compiletimechecker-from-modern-c-design-not-working-as Beklenen) –
Diğerini, kopya olarak kapatın. Bunun açık olmasına izin ver. –
@Paul R: Sanırım @Saurabh aynı soruyu iki kere (sanırım yanlışlıkla) paylaştı, diğeri de bu yazının bir kopyası olarak kapatıldı ve şimdi bunu bir diğerinin duplisi olarak görüyorsunuz. –