代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

这意味着什么:“警告:比较‘枚举A<B>’和‘枚举A<B>’”?

  •  2
  • WilliamKF  · 技术社区  · 14 年前

    typedef boost::make_unsigned<off_t>::type uoff_t;
    

    现在,我从gcc得到了这个冗长而令人困惑的警告,它抱怨将枚举与相同的枚举类型进行比较:

    In file included from proto.cpp:12:
    /usr/local/include/boost/type_traits/is_unsigned.hpp: In instantiation of 'boost::detail::is_ununsigned_helper<long int>':
    /usr/local/include/boost/type_traits/is_unsigned.hpp:73:   instantiated from 'boost::detail::is_unsigned_imp<long int>'
    /usr/local/include/boost/type_traits/is_unsigned.hpp:123:   instantiated from 'boost::is_unsigned<long int>'
    /usr/local/include/boost/type_traits/make_unsigned.hpp:110:   instantiated from 'boost::detail::make_unsigned_imp<long int>'
    /usr/local/include/boost/type_traits/make_unsigned.hpp:130:   instantiated from 'boost::make_unsigned<long int>'
    proto.h:42:   instantiated from here
    /usr/local/include/boost/type_traits/is_unsigned.hpp:40: warning: comparison between 'enum boost::detail::is_unsigned_values<long int>::<anonymous>' and 'enum boost::detail::is_unsigned_values<long int>::<anonymous>'
    

    有人能破解这个吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   usta    14 年前

    事情就是这样

    BOOST_NO_INCLASS_MEMBER_INITIALIZATION 在Boost.Config中定义(不确定为什么要为gcc定义,但我暂时不讨论这个问题)。因此,

    BOOST_STATIC_CONSTANT(no_cv_t, minus_one = (static_cast<no_cv_t>(-1)));
    BOOST_STATIC_CONSTANT(no_cv_t, zero = (static_cast<no_cv_t>(0)));
    

    boost::detail::is_unsigned_values 扩展到

    enum { minus_one = (static_cast<no_cv_t>(-1)) };
    enum { zero = (static_cast<no_cv_t>(0)) };
    

    不同的 在中比较枚举 boost::detail::is_ununsigned_helper . 因此发出警告,如果 BOOST_STATIC_CONSTANT() 扩展到 static const no_cv_t blah blah...

    还有两个问题有待回答:

    BOOST_NO_INCLASS_MEMBER_初始化 在你的案子里有定义吗?

    注意:我使用了Boost 1.43的代码作为参考。