2012-06-28 32 views
5

Şablon uzmanlığı kullanarak derleme zamanı algoritması seçimini uygulamaya çalışıyorum.GCC 4.7.1 aşırı yük ile genelleştirilmiş sabit ifade sorunu

template <class C> 
    struct choose 
    { 
     typedef size_t (*type)(const C*); 
     static constexpr type value = java_string_hashcode<C>; 
    }; 

Ben char türü için bu yapıyı uzman ettik:

Aşağıdaki kodu karma

template <> 
    struct choose<char> 
    { 
     typedef size_t (*type)(const char*); 
     static constexpr type value = fnv_1a_32_hash; 
    }; 

Ama bunu derlemeye çalıştığınızda, ben GCC 4.7 ile aşağıdaki hatayı alıyorum .1:

error: field initializer is not constant

Sorun benceIMO, size_t (*)(const char*) için örtülü yayınlanmış olsa bile,işlevi aşırı yüklenmiştir, bu sorunla ilgilenmelidir.

static constexpr type value = (type)fnv_1a_32_hash; 

Sorum geçerli:: Bu bir derleyici hata olduğunu ya aşırı yeniden adlandırma VEYA basitçe assignation döküm tarafından

Sonunda, geçici bir çözüm bulduk? Yoksa bir şey mi özlüyorum? Lütfen gerekli olan yerlerde açıklayınız ve belirtiniz.


fnv_1a_32_hash uygulama ayrıntıları:

constexpr size_t fnv_1a_32_hash(const char* p, size_t h) noexcept 
{ 
    return (*p == 0) ? h : fnv_1a_32_hash(p + 1, (h^*p) * fnv::prime); 
} 

constexpr size_t fnv_1a_32_hash(const char* p) noexcept 
{ 
    return fnv_1a_32_hash(p, fnv::offset_basis); 
} 
+0

hiç, ben hata mesajı aşırı bahsetmediğini bir hata (olduğunu düşünmek istiyorum sorun olmak). –

cevap

İlgili konular