Revert r290750 - Fix PR19460 - std::ios is convertible to int.

llvm-svn: 290752
This commit is contained in:
Eric Fiselier 2016-12-30 13:11:17 +00:00
parent 46d95400f4
commit 03226c5e06
2 changed files with 2 additions and 24 deletions

View File

@ -585,22 +585,9 @@ public:
typedef typename traits_type::pos_type pos_type;
typedef typename traits_type::off_type off_type;
#if defined(_LIBCPP_CXX03_LANG)
private:
struct __bool_tag {};
typedef void (basic_ios::*_BoolType)(__bool_tag) const;
void __true_value(__bool_tag) const {}
public:
_LIBCPP_ALWAYS_INLINE
operator _BoolType() const {
return !fail() ? &basic_ios::__true_value : nullptr;
}
#else
_LIBCPP_ALWAYS_INLINE
_LIBCPP_EXPLICIT operator bool() const {return !fail();}
#endif
_LIBCPP_EXPLICIT
operator bool() const {return !fail();}
_LIBCPP_ALWAYS_INLINE bool operator!() const {return fail();}
_LIBCPP_ALWAYS_INLINE iostate rdstate() const {return ios_base::rdstate();}
_LIBCPP_ALWAYS_INLINE void clear(iostate __state = goodbit) {ios_base::clear(__state);}

View File

@ -14,21 +14,12 @@
// operator unspecified-bool-type() const;
#include <ios>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
int main()
{
std::ios ios(0);
assert(static_cast<bool>(ios) == !ios.fail());
ios.setstate(std::ios::failbit);
assert(static_cast<bool>(ios) == !ios.fail());
static_assert((!std::is_convertible<std::ios, void*>::value), "");
static_assert((!std::is_convertible<std::ios, int>::value), "");
static_assert((!std::is_convertible<std::ios const&, int>::value), "");
#if TEST_STD_VER >= 11
static_assert((!std::is_convertible<std::ios, bool>::value), "");
#endif
}