27
28 #include "memory/allocation.hpp"
29
30 // An Integral Constant is a class providing a compile-time value of an
31 // integral type. An Integral Constant is also a nullary metafunction,
32 // returning itself. An integral constant object is implicitly
33 // convertible to the associated value.
34 //
35 // A type n is a model of Integral Constant if it meets the following
36 // requirements:
37 //
38 // n::ValueType : The integral type of n::value
39 // n::value : An integral constant expression
40 // n::type : IsSame<n::type, n>::value is true
41 // n::value_type const c = n() : c == n::value
42
43 // A model of the Integer Constant concept.
44 // T is an integral type, and is the value_type.
45 // v is an integral constant, and is the value.
46 template<typename T, T v>
47 struct IntegralConstant : AllStatic {
48 typedef T value_type;
49 static const value_type value = v;
50 typedef IntegralConstant<T, v> type;
51 operator value_type() { return value; }
52 };
53
54 // A bool valued IntegralConstant whose value is true.
55 typedef IntegralConstant<bool, true> TrueType;
56
57 // A bool valued IntegralConstant whose value is false.
58 typedef IntegralConstant<bool, false> FalseType;
59
60 #endif // SHARE_VM_METAPROGRAMMING_INTEGRALCONSTANT_HPP
|
27
28 #include "memory/allocation.hpp"
29
30 // An Integral Constant is a class providing a compile-time value of an
31 // integral type. An Integral Constant is also a nullary metafunction,
32 // returning itself. An integral constant object is implicitly
33 // convertible to the associated value.
34 //
35 // A type n is a model of Integral Constant if it meets the following
36 // requirements:
37 //
38 // n::ValueType : The integral type of n::value
39 // n::value : An integral constant expression
40 // n::type : IsSame<n::type, n>::value is true
41 // n::value_type const c = n() : c == n::value
42
43 // A model of the Integer Constant concept.
44 // T is an integral type, and is the value_type.
45 // v is an integral constant, and is the value.
46 template<typename T, T v>
47 struct IntegralConstant VALUE_OBJ_CLASS_SPEC {
48 typedef T value_type;
49 static const value_type value = v;
50 typedef IntegralConstant<T, v> type;
51 operator value_type() { return value; }
52 };
53
54 // A bool valued IntegralConstant whose value is true.
55 typedef IntegralConstant<bool, true> TrueType;
56
57 // A bool valued IntegralConstant whose value is false.
58 typedef IntegralConstant<bool, false> FalseType;
59
60 #endif // SHARE_VM_METAPROGRAMMING_INTEGRALCONSTANT_HPP
|