Merge pull request #47 from petamas/bugfix/member_T

Fix #46: optional<X> fails to compile with VS2015 if X has an embedded enum named T
This commit is contained in:
Andrzej Krzemieński
2018-01-03 14:08:31 +01:00
committed by GitHub
3 changed files with 46 additions and 1 deletions

View File

@ -747,7 +747,7 @@ class optional_base : public optional_tag
private :
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1900))
void destroy_impl ( ) { m_storage.ptr_ref()->~T() ; m_initialized = false ; }
#else
void destroy_impl ( ) { m_storage.ref().T::~T() ; m_initialized = false ; }

View File

@ -43,6 +43,7 @@ import testing ;
[ run optional_test_emplace.cpp ]
[ run optional_test_minimum_requirements.cpp ]
[ run optional_test_msvc_bug_workaround.cpp ]
[ run optional_test_member_T.cpp ]
[ run optional_test_tc_base.cpp ]
[ compile optional_test_sfinae_friendly_ctor.cpp ]
[ compile-fail optional_test_ref_convert_assign_const_int_prevented.cpp ]

View File

@ -0,0 +1,44 @@
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
struct Status
{
enum T
{
DISCONNECTED,
CONNECTING,
CONNECTED,
};
T mValue;
};
void test_member_T()
{
boost::optional<Status> x = Status();
x->mValue = Status::CONNECTED;
BOOST_TEST(x->mValue == Status::CONNECTED);
}
int main()
{
test_member_T();
return boost::report_errors();
}