Simplify and clean up library literals.

2013-06-07  Ed Smith-Rowland  <3dw4rd@verizon.net>

	Simplify and clean up library literals.
	* include/std/chrono: Simplify namespace and versioning management.
	* include/bits/basic_string.h: Ditto.
	* testsuite/20_util/duration/literals/types.cc: Remove bogus comment.
	* testsuite/20_util/duration/literals/values.cc: Ditto.
	* testsuite/21_strings/basic_string/literals/types.cc: Ditto.
	* testsuite/21_strings/basic_string/literals/values.cc: Ditto.

From-SVN: r199861
This commit is contained in:
Ed Smith-Rowland 2013-06-08 22:43:18 +00:00 committed by Edward Smith-Rowland
parent 83ac9249c8
commit 88c4d6b798
7 changed files with 152 additions and 176 deletions

View File

@ -1,3 +1,13 @@
2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net>
Simplify and clean up library literals.
* include/std/chrono: Simplify namespace and versioning management.
* include/bits/basic_string.h: Ditto.
* testsuite/20_util/duration/literals/types.cc: Remove bogus comment.
* testsuite/20_util/duration/literals/values.cc: Ditto.
* testsuite/21_strings/basic_string/literals/types.cc: Ditto.
* testsuite/21_strings/basic_string/literals/values.cc: Ditto.
2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> 2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net>
Implement N3654 - Quoted Strings Library Proposal Implement N3654 - Quoted Strings Library Proposal

View File

@ -3103,46 +3103,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ }; { };
#endif #endif
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#if __cplusplus > 201103L #if __cplusplus > 201103L
namespace std _GLIBCXX_VISIBILITY(default) inline namespace literals {
{ inline namespace string_literals {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
inline namespace literals { inline basic_string<char>
inline namespace string_literals { operator"" s(const char* __str, size_t __len)
{ return basic_string<char>{__str, __len}; }
inline basic_string<char>
operator"" s(const char* __str, size_t __len)
{ return basic_string<char>{__str, __len}; }
#ifdef _GLIBCXX_USE_WCHAR_T #ifdef _GLIBCXX_USE_WCHAR_T
inline basic_string<wchar_t> inline basic_string<wchar_t>
operator"" s(const wchar_t* __str, size_t __len) operator"" s(const wchar_t* __str, size_t __len)
{ return basic_string<wchar_t>{__str, __len}; } { return basic_string<wchar_t>{__str, __len}; }
#endif #endif
#ifdef _GLIBCXX_USE_C99_STDINT_TR1 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
inline basic_string<char16_t> inline basic_string<char16_t>
operator"" s(const char16_t* __str, size_t __len) operator"" s(const char16_t* __str, size_t __len)
{ return basic_string<char16_t>{__str, __len}; } { return basic_string<char16_t>{__str, __len}; }
inline basic_string<char32_t> inline basic_string<char32_t>
operator"" s(const char32_t* __str, size_t __len) operator"" s(const char32_t* __str, size_t __len)
{ return basic_string<char32_t>{__str, __len}; } { return basic_string<char32_t>{__str, __len}; }
#endif #endif
} // inline namespace string_literals } // inline namespace string_literals
} // inline namespace literals } // inline namespace literals
#endif // __cplusplus > 201103L
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} // namespace std } // namespace std
#endif // __cplusplus > 201103L
#endif // C++11 #endif // C++11
#endif /* _BASIC_STRING_H */ #endif /* _BASIC_STRING_H */

View File

@ -713,7 +713,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
* *
* Time returned represents wall time from the system-wide clock. * Time returned represents wall time from the system-wide clock.
*/ */
struct system_clock struct system_clock
{ {
typedef chrono::nanoseconds duration; typedef chrono::nanoseconds duration;
typedef duration::rep rep; typedef duration::rep rep;
@ -775,148 +775,137 @@ _GLIBCXX_END_NAMESPACE_VERSION
*/ */
using high_resolution_clock = system_clock; using high_resolution_clock = system_clock;
} // end inline namespace _V2 } // end inline namespace _V2
_GLIBCXX_END_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION
} // namespace chrono } // namespace chrono
#if __cplusplus > 201103L
inline namespace literals {
inline namespace chrono_literals {
namespace __detail {
using namespace __parse_int;
template<unsigned long long _Val, typename _Dur>
struct _Select_type
: conditional<
_Val <= static_cast<unsigned long long>
(numeric_limits<typename _Dur::rep>::max()),
_Dur, void>
{
static constexpr typename _Select_type::type
value{static_cast<typename _Select_type::type>(_Val)};
};
template<unsigned long long _Val, typename _Dur>
constexpr typename _Select_type<_Val, _Dur>::type
_Select_type<_Val, _Dur>::value;
} // __detail
constexpr chrono::duration<long double, ratio<3600,1>>
operator"" h(long double __hours)
{ return chrono::duration<long double, ratio<3600,1>>{__hours}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::hours>::type
operator"" h()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::hours>::value;
}
constexpr chrono::duration<long double, ratio<60,1>>
operator"" min(long double __mins)
{ return chrono::duration<long double, ratio<60,1>>{__mins}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::minutes>::type
operator"" min()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::minutes>::value;
}
constexpr chrono::duration<long double>
operator"" s(long double __secs)
{ return chrono::duration<long double>{__secs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::seconds>::type
operator"" s()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::seconds>::value;
}
constexpr chrono::duration<long double, milli>
operator"" ms(long double __msecs)
{ return chrono::duration<long double, milli>{__msecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::milliseconds>::type
operator"" ms()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::milliseconds>::value;
}
constexpr chrono::duration<long double, micro>
operator"" us(long double __usecs)
{ return chrono::duration<long double, micro>{__usecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::microseconds>::type
operator"" us()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::microseconds>::value;
}
constexpr chrono::duration<long double, nano>
operator"" ns(long double __nsecs)
{ return chrono::duration<long double, nano>{__nsecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::nanoseconds>::type
operator"" ns()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::nanoseconds>::value;
}
} // inline namespace chrono_literals
} // inline namespace literals
#endif // __cplusplus > 201103L
// @} group chrono // @} group chrono
} // namespace } // namespace std
#endif //_GLIBCXX_USE_C99_STDINT_TR1 #endif //_GLIBCXX_USE_C99_STDINT_TR1
#endif // C++11 #endif // C++11
#if __cplusplus > 201103L
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
inline namespace literals {
inline namespace chrono_literals {
namespace __detail {
using namespace __parse_int;
template<unsigned long long _Val, typename _Dur>
struct _Select_type
: conditional<
_Val <= static_cast<unsigned long long>
(numeric_limits<typename _Dur::rep>::max()),
_Dur, void>
{
static constexpr typename _Select_type::type
value{static_cast<typename _Select_type::type>(_Val)};
};
template<unsigned long long _Val, typename _Dur>
constexpr typename _Select_type<_Val, _Dur>::type
_Select_type<_Val, _Dur>::value;
} // __detail
constexpr chrono::duration<long double, ratio<3600,1>>
operator"" h(long double __hours)
{ return chrono::duration<long double, ratio<3600,1>>{__hours}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::hours>::type
operator"" h()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::hours>::value;
}
constexpr chrono::duration<long double, ratio<60,1>>
operator"" min(long double __mins)
{ return chrono::duration<long double, ratio<60,1>>{__mins}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::minutes>::type
operator"" min()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::minutes>::value;
}
constexpr chrono::duration<long double>
operator"" s(long double __secs)
{ return chrono::duration<long double>{__secs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::seconds>::type
operator"" s()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::seconds>::value;
}
constexpr chrono::duration<long double, milli>
operator"" ms(long double __msecs)
{ return chrono::duration<long double, milli>{__msecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::milliseconds>::type
operator"" ms()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::milliseconds>::value;
}
constexpr chrono::duration<long double, micro>
operator"" us(long double __usecs)
{ return chrono::duration<long double, micro>{__usecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::microseconds>::type
operator"" us()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::microseconds>::value;
}
constexpr chrono::duration<long double, nano>
operator"" ns(long double __nsecs)
{ return chrono::duration<long double, nano>{__nsecs}; }
template <char... _Digits>
constexpr typename
__detail::_Select_type<__select_int::_Select_int<_Digits...>::value,
chrono::nanoseconds>::type
operator"" ns()
{
return __detail::_Select_type<
__select_int::_Select_int<_Digits...>::value,
chrono::nanoseconds>::value;
}
} // inline namespace chrono_literals
} // inline namespace literals
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif //_GLIBCXX_USE_C99_STDINT_TR1
#endif // __cplusplus > 201103L
#endif //_GLIBCXX_CHRONO #endif //_GLIBCXX_CHRONO

View File

@ -18,10 +18,6 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// NOTE: This makes use of the fact that we know how moveable
// is implemented on string (via swap). If the implementation changed
// this test may begin to fail.
#include <chrono> #include <chrono>
#include <type_traits> #include <type_traits>

View File

@ -18,10 +18,6 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// NOTE: This makes use of the fact that we know how moveable
// is implemented on string (via swap). If the implementation changed
// this test may begin to fail.
#include <chrono> #include <chrono>
#include <testsuite_hooks.h> #include <testsuite_hooks.h>

View File

@ -18,10 +18,6 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// NOTE: This makes use of the fact that we know how moveable
// is implemented on string (via swap). If the implementation changed
// this test may begin to fail.
#include <string> #include <string>
#include <type_traits> #include <type_traits>

View File

@ -18,10 +18,6 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// NOTE: This makes use of the fact that we know how moveable
// is implemented on string (via swap). If the implementation changed
// this test may begin to fail.
#include <string> #include <string>
#include <testsuite_hooks.h> #include <testsuite_hooks.h>