2016-03-18 23 views
1

Aşağıdaki örnekte, Intel C++ derleyicisini kullanarak aşağıdaki http://www.boost.org/doc/libs/1_60_0/libs/spirit/example/qi/compiler_tutorial/calc3.cpp derlemeyi deniyorum.Intel C++ derleyicisi ile boost :: spirit kullanarak programı derleme başarısız oldu

Derleme başarısız oluyor ve 300 kB hata alıyor. İlk birkaçı: 1.60, derleyici sürümü:

boost/fusion/container/vector/vector.hpp(69): error: namespace "boost::fusion::vector_detail::result_of" has no member "value_at_c" 
      : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type> 
                   ^
boost/fusion/container/vector/vector.hpp(69): error: expected a ">" 
      : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type> 
                     ^
boost/fusion/container/vector/vector.hpp(69): error: not a class or struct name 
      : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type> 
      ^

Komut satırı

icl.exe /I<path-to-boost> calc3.cpp 

Boost versiyonudur 15.0.6.285 Yapı 20151119

Ben değiştirerek hatayı düzeltmek mümkün olmasına rağmen satır 69

struct is_convertible_to_first 
     : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type> 
    {}; 

için
struct is_convertible_to_first 
     : boost::is_convertible<Sequence, typename boost::fusion::result_of::value_at_c<This, 0>::type> 
    {}; 

, Hala merak ediyorum neden bir sorun var?

cevap

1

en makul tahmin ICCboost::fusion::vector_detail içinde bulur result_of ad uygun olmayan derleyici için sadece geçici bir çözüm olmasıdır boost::fusion::result_of sadece Bildirimlerin, adı çatışması böylece (örneğin ben GCC 4.6 de orada biraz destek yoksun düşünüyorum) Orada.

Bu, kütüphane dev'leri ile raporlanabilir bir hatadır; ad alanı eski derleyicileri barındırmak için daha fazla nitelikli olmalıdır. (Söz konusu derleyiciler desteklenmezse, bu artık düzeltilemez)