2015-05-21 11 views
8

vC++ 10/boost 1.48 kod açıklığını vC++ 12/boost 1.57'ye aktarmaya başladım ve boost :: isteğe bağlı boole dönüştürülemeyen bir hata alıyorum. Bunun bir destek unsuru olduğunu düşündüm: isteğe bağlı, çıkarıldı mı?Yükseltme yaptık: İsteğe bağlı örtük boole gitmeye mi gitti?

Örnek:

bool fizz(){ 
    boost::optional<int32_t> buzz; 
    return buzz; 
} 

Error 21 error C2440: 'return' : cannot convert from 'boost::optional<int32_t>' to 'bool' 

cevap

10

Evet verir. Boost 1.55 hala kullanılan Safe Bool Idiom:

BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT() 

kabaca:

#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) 
    explicit operator bool() const noexcept; 
#else if !defined(BOOST_NO_UNSPECIFIED_BOOL) 
    operator boost::detail::unspecified_bool_type() const noexcept; 
#else 
    operator bool() const noexcept; 
#endif 

Sana yok tahmin ediyorum

// implicit conversion to "bool" 
// No-throw 
operator unspecified_bool_type() const { return this->safe_bool() ; } 

Boost 1.56, Boost 1.57 ve Boost 1.58 şimdi bu makro kullanmak BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS tanımlı - ve derleyiciniz açık dönüşüm operatörlerini desteklediğinden Muhtemelen bu şekilde devam et!

+0

1.58'in uygulaması değişmedi. Hala makroyu kullanıyor. –

+0

@ T.C. Hatalar düzeltildi. – Barry

+0

Detaylı cevap için teşekkürler. Makrodan bahsetmek, eski eşyaları başka bir yarım yıl boyunca desteklememiz gerektiğinden çok yararlıdır. – sellsword