3

gcc 4.7.2でブーストミラーを構築しようとすると、このエラーが発生しましたが、奇妙なことに、このドキュメントが表示されます。

::std::has_nothrow_default_constructor移動/変更されましたか?

In file included from /home/kfeng/src/mirror-lib/include/mirror/type_traits.hpp:20:0,
                 from /home/kfeng/src/mirror-lib/include/mirror/mirror_base.hpp:38,
                 from /home/kfeng/src/mirror-lib/include/mirror/mirror.hpp:16,
                 from /home/kfeng/src/mirror-lib/src/mirror/example/all_member_variables.cpp:10:
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_default_constructible.hpp:31:2: error: ‘has_nothrow_default_constructor’ is not a member of ‘std’
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_default_constructible.hpp:28:9: error: parse error in template argument list
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_default_constructible.hpp:31:43: error: expected ‘{’ before ‘::’ token
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_default_constructible.hpp:31:51: error: expected initializer before ‘||’ token
In file included from /home/kfeng/src/mirror-lib/include/mirror/type_traits.hpp:21:0,
                 from /home/kfeng/src/mirror-lib/include/mirror/mirror_base.hpp:38,
                 from /home/kfeng/src/mirror-lib/include/mirror/mirror.hpp:16,
                 from /home/kfeng/src/mirror-lib/src/mirror/example/all_member_variables.cpp:10:
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_copy_constructible.hpp:31:2: error: ‘has_nothrow_copy_constructor’ is not a member of ‘std’
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_copy_constructible.hpp:28:9: error: parse error in template argument list
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_copy_constructible.hpp:31:40: error: expected ‘{’ before ‘::’ token
/home/kfeng/src/mirror-lib/include/mirror/type_traits/is_copy_constructible.hpp:31:48: error: expected initializer before ‘||’ token
make[2]: *** [src/mirror/example/CMakeFiles/mirror-all_member_variables.dir/all_member_variables.cpp.o] Error 1
make[1]: *** [src/mirror/example/CMakeFiles/mirror-all_member_variables.dir/all] Error 2
make: *** [all] Error 2

以下のパビーのメモを使用して答える

このようなものはgcc4.7.2で動作するはずです-パッチを提出し、メンテナにそれをどのように処理するのが最善かを決定させます。

template <typename T>
 struct is_default_constructible
  : std::integral_constant<
        bool,
        ::std::has_trivial_default_constructor<T>::value ||
#if __cplusplus>=201103L 
        ::std::is_nothrow_default_constructible<T>::value ||
#else
        ::std::has_nothrow_default_constructor<T>::value ||
#endif
        mirror::_class::_<T>::has_default_ctr::value>
 { };
4

2 に答える 2

6

std::is_nothrow_default_constructibleC++11 では、命名との一貫性を高めるために変更されました。

于 2012-12-17T06:49:32.533 に答える
1

あなたはGCC4.6.2のドキュメントを見ていますが、GCC 4.7.2を使用しているので、それらが一致しないことはそれほど驚くことではありません。

特性はn3142によって名前が変更されました

コメントはlibc++で動作しないと言っていますが、コンパイラでサポートされているものを検出しようとするコードについては、私の以前の回答https://stackoverflow.com/a/12716778/981959を参照してください。

于 2012-12-17T09:46:55.133 に答える