This is an initial commit of constexpr support as proposed by Richard Smith. This by no means completes constexpr support. Indeed, it hardly scratches the surface. All it does is lay the foundation in <__config> and changes those few places in the library that are already using that foundation.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@153856 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant 2012-04-02 00:40:41 +00:00
parent dc1345fd44
commit 27b4fd30ef
4 changed files with 10 additions and 15 deletions

View File

@ -384,7 +384,9 @@ template <unsigned> struct __static_assert_check {};
#endif
#ifdef _LIBCPP_HAS_NO_CONSTEXPR
#define constexpr const
#define _LIBCPP_CONSTEXPR
#else
#define _LIBCPP_CONSTEXPR constexpr
#endif
#ifndef __has_feature

View File

@ -2712,8 +2712,8 @@ public:
result_type operator()();
static constexpr result_type min() {return _Min;}
static constexpr result_type max() {return _Max;}
static _LIBCPP_CONSTEXPR result_type min() {return _Min;}
static _LIBCPP_CONSTEXPR result_type max() {return _Max;}
friend __rs_default __rs_get();
};

View File

@ -3374,9 +3374,9 @@ public:
static const result_type _Max = 0xFFFFFFFFu;
_LIBCPP_INLINE_VISIBILITY
static constexpr result_type min() { return _Min;}
static _LIBCPP_CONSTEXPR result_type min() { return _Min;}
_LIBCPP_INLINE_VISIBILITY
static constexpr result_type max() { return _Max;}
static _LIBCPP_CONSTEXPR result_type max() { return _Max;}
// constructors
explicit random_device(const string& __token = "/dev/urandom");

View File

@ -163,22 +163,15 @@ struct __two {char _[2];};
template <class _Tp, _Tp __v>
struct _LIBCPP_VISIBLE integral_constant
{
static constexpr _Tp value = __v;
static _LIBCPP_CONSTEXPR const _Tp value = __v;
typedef _Tp value_type;
typedef integral_constant type;
_LIBCPP_INLINE_VISIBILITY
#ifndef _LIBCPP_HAS_NO_CONSTEXPR
constexpr
#endif
operator value_type()
#ifdef _LIBCPP_HAS_NO_CONSTEXPR
const
#endif
{return value;}
_LIBCPP_CONSTEXPR operator value_type() const {return value;}
};
template <class _Tp, _Tp __v>
constexpr _Tp integral_constant<_Tp, __v>::value;
_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value;
typedef integral_constant<bool, true> true_type;
typedef integral_constant<bool, false> false_type;