Есть ли обходной путь для этого предупреждения C4702 во время компоновки ?

Я использую boost :: variant, и у меня проблемы с компиляцией в режиме выпуска. Я работаю в VC2010 с уровнем предупреждений 4 и предупреждениями как ошибки. Приведенный ниже код отлично компилируется в режиме отладки, но в режиме выпуска я получаю кучу предупреждений C4702 «Недостижимый код», выдаваемых во время компоновки (предположительно, я m получает здесь предупреждения компилятора, потому что при включенной оптимизации происходит генерация кода времени компоновки.)

Кто-нибудь успешно отключил эти предупреждения в этой ситуации? Я бы предпочел сохранить высокий уровень предупреждений и предупреждений как ошибок, если это возможно.

#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;
}

Предупреждение вызывается шаблонным оператором (), который я использую, чтобы отловить попытки применить посетителя к плохим вариантным типам.

14
задан RobH 1 April 2011 в 11:10
поделиться