我正在使用 boost::variant 并且在发布模式下编译时遇到问题。我在 VC2010 中工作,警告级别为 4,警告为错误。下面的代码在调试模式下编译得很好,但在发布模式下,我在链接时收到一堆“无法访问的代码”C4702 警告(大概我在这里收到编译器警告,因为启用优化时会生成链接时代码。)
在这种情况下,是否有人成功禁用了这些警告?如果可能的话,我宁愿保持高警告级别和警告作为错误。
#pragma warning( disable:4702 )
...似乎在这里不起作用。这是一些示例代码:
#include <boost/variant.hpp>
struct null{};
typedef boost::variant< null, double > variant_t;
class addition_visitor
: public boost::static_visitor< variant_t >
{
public:
template< typename T, typename U >
variant_t operator()( const T&, const U& ) const
{
throw( "Bad types" );
}
variant_t operator()( const double& left, const double& right ) const
{
return variant_t( left * right );
}
};
int main(int /*argc*/, char** /*argv*/)
{
variant_t a( 3.0 ), b( 2.0 );
variant_t c = boost::apply_visitor( addition_visitor(), a, b );
return 0;
}
警告是由模板化的 operator() 触发的,我用它来捕捉将访问者应用于不良变体类型的尝试。