2011-06-15 10 views
10

compiled this code with ideone var. Ve neden derleme hatası verdiğini merak ediyordum. constexpr işlevi template argümanı olarak izin verilmiyor mu, yoksa derleyicide bir hata mı var?Constexpr işlevini şablon argümanı olarak kullanmak geçerli midir?

Düzenleme: Üstelik int get() için const int get() değişti ideone ile Eğer constexpr sonra still declaring an array is allowed kaldırırsanız, yani bir daha hata var !! Bence bu bir C99 özelliği.

+0

Düzenlemeleriniz yanlıştır, 'consttexpr const get() 'yaptık. – GManNickG

+0

@GMan, teşekkürler ... – iammilind

+3

Düzenlemede, bu bir C99 özelliğidir ve gcc bir uzantı olarak sahiptir, ancak uygun C++ değildir ve taşınabilir olmayacaktır. Standartlara dahil edilmek olarak kabul edildi ve reddedildiği için, derleme zamanında türlerin (büyüklüğün türün bir parçası) bilinmesi gerektiği değişmezdi. C de bu kadar önemli değil, fakat C++'da bu diziyi bir şablona bir tür argüman olarak kullanamazsınız (derleme zamanında kesin tip bilinmeyen) - bu arada gcc'deki davranışa göre, Eğer yapmaya çalışırsanız şikayet. –

cevap

13

GCC 4.5 (en azından Ideone'da kullanılan sürüm) geçerli kullanımınız dahil olmak üzere constexpr'u tamamen desteklemez; const'a doğru sular. GCC 4.6 ve üstü doğru şekilde destekler.