boost :: variant를 사용 중이며 릴리스 모드에서 컴파일하는 데 문제가 있습니다. 경고 수준 4 및 경고를 VC2010에서 오류로 처리하고 있습니다. 아래의 코드는 디버그 모드에서 정상적으로 컴파일되지만 릴리스 모드에서는 링크 시간에 "Unreachable code"C4702 경고가 발생합니다 (최적화가 활성화되면 링크 타임 코드 생성이 있기 때문에 컴파일러 경고가 표시됩니다).이 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;
}
경고는 내가 나쁜 변형 유형에 방문자를 적용하는 시도를 잡기 위해 사용하고 템플릿 기반 연산자()에 의해 트리거됩니다.
엄지 손가락 오류로 경고 경고 수준 4 +에! –
당신은 포함하기 전에 파일의 상단에있는 프라그를 넣어 시도? 그리고 @Matthieu는 절대적으로 버그가 나타나기 전에이를 없앱니다. – ssube
클래스 정의 주변의 apply_visitor 호출과 stdafx.h의 맨 위에있는 파일 상단에 pragma를 넣으려고 시도했습니다. 불행히도. – RobH