3 // (C) Copyright Howard Hinnant
4 // (C) Copyright 2010 Vicente J. Botet Escriba
5 // Use, modification and distribution are subject to the Boost Software License,
6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt).
9 // This code was adapted by Vicente from Howard Hinnant's experimental work
10 // on chrono i/o under lvm/libc++ to Boost
12 #ifndef BOOST_RATIO_RATIO_IO_HPP
13 #define BOOST_RATIO_RATIO_IO_HPP
25 template <class Ratio, class CharT>
28 static basic_string<CharT> prefix();
29 static basic_string<CharT> symbol();
35 #include <boost/ratio/config.hpp>
37 #ifdef BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
38 #include <boost/ratio/detail/ratio_io.hpp>
41 #include <boost/config.hpp>
42 #include <boost/ratio/ratio.hpp>
43 #include <boost/type_traits/integral_constant.hpp>
48 #if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) || defined(BOOST_NO_CXX11_U16STRING) || defined(BOOST_NO_CXX11_U32STRING)
49 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
50 #undef BOOST_RATIO_HAS_UNICODE_SUPPORT
53 #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1
58 //template <class Ratio>
59 //struct ratio_string_is_localizable : false_type {};
60 //template <class Ratio>
61 //struct ratio_string_id : integral_constant<int,0> {};
63 template <class Ratio, class CharT>
66 static std::basic_string<CharT> symbol() {return prefix();}
67 static std::basic_string<CharT> prefix();
70 template <class Ratio, class CharT>
71 std::basic_string<CharT>
72 ratio_string<Ratio, CharT>::prefix()
74 std::basic_ostringstream<CharT> os;
75 os << CharT('[') << Ratio::num << CharT('/')
76 << Ratio::den << CharT(']');
80 #ifdef BOOST_RATIO_HAS_STATIC_STRING
81 namespace ratio_detail {
82 template <class Ratio, class CharT>
83 struct ratio_string_static
85 static std::string symbol() {
86 return std::basic_string<CharT>(
88 typename ratio_static_string<Ratio, CharT>::symbol
91 static std::string prefix() {
92 return std::basic_string<CharT>(
94 typename ratio_static_string<Ratio, CharT>::prefix
102 //struct ratio_string_is_localizable<atto> : true_type {};
105 //struct ratio_string_id<atto> : integral_constant<int,-18> {};
107 #ifdef BOOST_RATIO_HAS_STATIC_STRING
108 template <typename CharT>
109 struct ratio_string<atto, CharT> :
110 ratio_detail::ratio_string_static<atto,CharT>
115 struct ratio_string<atto, char>
117 static std::string symbol() {return std::string(1, 'a');}
118 static std::string prefix() {return std::string("atto");}
121 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
124 struct ratio_string<atto, char16_t>
126 static std::u16string symbol() {return std::u16string(1, u'a');}
127 static std::u16string prefix() {return std::u16string(u"atto");}
131 struct ratio_string<atto, char32_t>
133 static std::u32string symbol() {return std::u32string(1, U'a');}
134 static std::u32string prefix() {return std::u32string(U"atto");}
139 #ifndef BOOST_NO_STD_WSTRING
141 struct ratio_string<atto, wchar_t>
143 static std::wstring symbol() {return std::wstring(1, L'a');}
144 static std::wstring prefix() {return std::wstring(L"atto");}
151 #ifdef BOOST_RATIO_HAS_STATIC_STRING
152 template <typename CharT>
153 struct ratio_string<femto, CharT> :
154 ratio_detail::ratio_string_static<femto,CharT>
160 struct ratio_string<femto, char>
162 static std::string symbol() {return std::string(1, 'f');}
163 static std::string prefix() {return std::string("femto");}
166 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
169 struct ratio_string<femto, char16_t>
171 static std::u16string symbol() {return std::u16string(1, u'f');}
172 static std::u16string prefix() {return std::u16string(u"femto");}
176 struct ratio_string<femto, char32_t>
178 static std::u32string symbol() {return std::u32string(1, U'f');}
179 static std::u32string prefix() {return std::u32string(U"femto");}
184 #ifndef BOOST_NO_STD_WSTRING
186 struct ratio_string<femto, wchar_t>
188 static std::wstring symbol() {return std::wstring(1, L'f');}
189 static std::wstring prefix() {return std::wstring(L"femto");}
196 #ifdef BOOST_RATIO_HAS_STATIC_STRING
197 template <typename CharT>
198 struct ratio_string<pico, CharT> :
199 ratio_detail::ratio_string_static<pico,CharT>
204 struct ratio_string<pico, char>
206 static std::string symbol() {return std::string(1, 'p');}
207 static std::string prefix() {return std::string("pico");}
210 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
213 struct ratio_string<pico, char16_t>
215 static std::u16string symbol() {return std::u16string(1, u'p');}
216 static std::u16string prefix() {return std::u16string(u"pico");}
220 struct ratio_string<pico, char32_t>
222 static std::u32string symbol() {return std::u32string(1, U'p');}
223 static std::u32string prefix() {return std::u32string(U"pico");}
228 #ifndef BOOST_NO_STD_WSTRING
230 struct ratio_string<pico, wchar_t>
232 static std::wstring symbol() {return std::wstring(1, L'p');}
233 static std::wstring prefix() {return std::wstring(L"pico");}
240 #ifdef BOOST_RATIO_HAS_STATIC_STRING
241 template <typename CharT>
242 struct ratio_string<nano, CharT> :
243 ratio_detail::ratio_string_static<nano,CharT>
248 struct ratio_string<nano, char>
250 static std::string symbol() {return std::string(1, 'n');}
251 static std::string prefix() {return std::string("nano");}
254 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
257 struct ratio_string<nano, char16_t>
259 static std::u16string symbol() {return std::u16string(1, u'n');}
260 static std::u16string prefix() {return std::u16string(u"nano");}
264 struct ratio_string<nano, char32_t>
266 static std::u32string symbol() {return std::u32string(1, U'n');}
267 static std::u32string prefix() {return std::u32string(U"nano");}
272 #ifndef BOOST_NO_STD_WSTRING
274 struct ratio_string<nano, wchar_t>
276 static std::wstring symbol() {return std::wstring(1, L'n');}
277 static std::wstring prefix() {return std::wstring(L"nano");}
284 #ifdef BOOST_RATIO_HAS_STATIC_STRING
285 template <typename CharT>
286 struct ratio_string<micro, CharT> :
287 ratio_detail::ratio_string_static<micro,CharT>
292 struct ratio_string<micro, char>
294 static std::string symbol() {return std::string("\xC2\xB5");}
295 static std::string prefix() {return std::string("micro");}
298 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
301 struct ratio_string<micro, char16_t>
303 static std::u16string symbol() {return std::u16string(1, u'\xB5');}
304 static std::u16string prefix() {return std::u16string(u"micro");}
308 struct ratio_string<micro, char32_t>
310 static std::u32string symbol() {return std::u32string(1, U'\xB5');}
311 static std::u32string prefix() {return std::u32string(U"micro");}
316 #ifndef BOOST_NO_STD_WSTRING
318 struct ratio_string<micro, wchar_t>
320 static std::wstring symbol() {return std::wstring(1, L'\xB5');}
321 static std::wstring prefix() {return std::wstring(L"micro");}
328 #ifdef BOOST_RATIO_HAS_STATIC_STRING
329 template <typename CharT>
330 struct ratio_string<milli, CharT> :
331 ratio_detail::ratio_string_static<milli,CharT>
336 struct ratio_string<milli, char>
338 static std::string symbol() {return std::string(1, 'm');}
339 static std::string prefix() {return std::string("milli");}
342 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
345 struct ratio_string<milli, char16_t>
347 static std::u16string symbol() {return std::u16string(1, u'm');}
348 static std::u16string prefix() {return std::u16string(u"milli");}
352 struct ratio_string<milli, char32_t>
354 static std::u32string symbol() {return std::u32string(1, U'm');}
355 static std::u32string prefix() {return std::u32string(U"milli");}
360 #ifndef BOOST_NO_STD_WSTRING
362 struct ratio_string<milli, wchar_t>
364 static std::wstring symbol() {return std::wstring(1, L'm');}
365 static std::wstring prefix() {return std::wstring(L"milli");}
372 #ifdef BOOST_RATIO_HAS_STATIC_STRING
373 template <typename CharT>
374 struct ratio_string<centi, CharT> :
375 ratio_detail::ratio_string_static<centi,CharT>
380 struct ratio_string<centi, char>
382 static std::string symbol() {return std::string(1, 'c');}
383 static std::string prefix() {return std::string("centi");}
386 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
389 struct ratio_string<centi, char16_t>
391 static std::u16string symbol() {return std::u16string(1, u'c');}
392 static std::u16string prefix() {return std::u16string(u"centi");}
396 struct ratio_string<centi, char32_t>
398 static std::u32string symbol() {return std::u32string(1, U'c');}
399 static std::u32string prefix() {return std::u32string(U"centi");}
404 #ifndef BOOST_NO_STD_WSTRING
406 struct ratio_string<centi, wchar_t>
408 static std::wstring symbol() {return std::wstring(1, L'c');}
409 static std::wstring prefix() {return std::wstring(L"centi");}
416 #ifdef BOOST_RATIO_HAS_STATIC_STRING
417 template <typename CharT>
418 struct ratio_string<deci, CharT> :
419 ratio_detail::ratio_string_static<deci,CharT>
425 struct ratio_string<deci, char>
427 static std::string symbol() {return std::string(1, 'd');}
428 static std::string prefix() {return std::string("deci");}
431 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
434 struct ratio_string<deci, char16_t>
436 static std::u16string symbol() {return std::u16string(1, u'd');}
437 static std::u16string prefix() {return std::u16string(u"deci");}
441 struct ratio_string<deci, char32_t>
443 static std::u32string symbol() {return std::u32string(1, U'd');}
444 static std::u32string prefix() {return std::u32string(U"deci");}
449 #ifndef BOOST_NO_STD_WSTRING
451 struct ratio_string<deci, wchar_t>
453 static std::wstring symbol() {return std::wstring(1, L'd');}
454 static std::wstring prefix() {return std::wstring(L"deci");}
464 #ifdef BOOST_RATIO_HAS_STATIC_STRING
465 template <typename CharT>
466 struct ratio_string<deca, CharT> :
467 ratio_detail::ratio_string_static<deca,CharT>
472 struct ratio_string<deca, char>
474 static std::string symbol() {return std::string("da");}
475 static std::string prefix() {return std::string("deca");}
478 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
481 struct ratio_string<deca, char16_t>
483 static std::u16string symbol() {return std::u16string(u"da");}
484 static std::u16string prefix() {return std::u16string(u"deca");}
488 struct ratio_string<deca, char32_t>
490 static std::u32string symbol() {return std::u32string(U"da");}
491 static std::u32string prefix() {return std::u32string(U"deca");}
496 #ifndef BOOST_NO_STD_WSTRING
498 struct ratio_string<deca, wchar_t>
500 static std::wstring symbol() {return std::wstring(L"da");}
501 static std::wstring prefix() {return std::wstring(L"deca");}
508 #ifdef BOOST_RATIO_HAS_STATIC_STRING
509 template <typename CharT>
510 struct ratio_string<hecto, CharT> :
511 ratio_detail::ratio_string_static<hecto,CharT>
516 struct ratio_string<hecto, char>
518 static std::string symbol() {return std::string(1, 'h');}
519 static std::string prefix() {return std::string("hecto");}
522 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
525 struct ratio_string<hecto, char16_t>
527 static std::u16string symbol() {return std::u16string(1, u'h');}
528 static std::u16string prefix() {return std::u16string(u"hecto");}
532 struct ratio_string<hecto, char32_t>
534 static std::u32string symbol() {return std::u32string(1, U'h');}
535 static std::u32string prefix() {return std::u32string(U"hecto");}
540 #ifndef BOOST_NO_STD_WSTRING
542 struct ratio_string<hecto, wchar_t>
544 static std::wstring symbol() {return std::wstring(1, L'h');}
545 static std::wstring prefix() {return std::wstring(L"hecto");}
552 #ifdef BOOST_RATIO_HAS_STATIC_STRING
553 template <typename CharT>
554 struct ratio_string<kilo, CharT> :
555 ratio_detail::ratio_string_static<kilo,CharT>
560 struct ratio_string<kilo, char>
562 static std::string symbol() {return std::string(1, 'k');}
563 static std::string prefix() {return std::string("kilo");}
566 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
569 struct ratio_string<kilo, char16_t>
571 static std::u16string symbol() {return std::u16string(1, u'k');}
572 static std::u16string prefix() {return std::u16string(u"kilo");}
576 struct ratio_string<kilo, char32_t>
578 static std::u32string symbol() {return std::u32string(1, U'k');}
579 static std::u32string prefix() {return std::u32string(U"kilo");}
584 #ifndef BOOST_NO_STD_WSTRING
586 struct ratio_string<kilo, wchar_t>
588 static std::wstring symbol() {return std::wstring(1, L'k');}
589 static std::wstring prefix() {return std::wstring(L"kilo");}
596 #ifdef BOOST_RATIO_HAS_STATIC_STRING
597 template <typename CharT>
598 struct ratio_string<mega, CharT> :
599 ratio_detail::ratio_string_static<mega,CharT>
605 struct ratio_string<mega, char>
607 static std::string symbol() {return std::string(1, 'M');}
608 static std::string prefix() {return std::string("mega");}
611 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
614 struct ratio_string<mega, char16_t>
616 static std::u16string symbol() {return std::u16string(1, u'M');}
617 static std::u16string prefix() {return std::u16string(u"mega");}
621 struct ratio_string<mega, char32_t>
623 static std::u32string symbol() {return std::u32string(1, U'M');}
624 static std::u32string prefix() {return std::u32string(U"mega");}
629 #ifndef BOOST_NO_STD_WSTRING
631 struct ratio_string<mega, wchar_t>
633 static std::wstring symbol() {return std::wstring(1, L'M');}
634 static std::wstring prefix() {return std::wstring(L"mega");}
641 #ifdef BOOST_RATIO_HAS_STATIC_STRING
642 template <typename CharT>
643 struct ratio_string<giga, CharT> :
644 ratio_detail::ratio_string_static<giga,CharT>
650 struct ratio_string<giga, char>
652 static std::string symbol() {return std::string(1, 'G');}
653 static std::string prefix() {return std::string("giga");}
656 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
659 struct ratio_string<giga, char16_t>
661 static std::u16string symbol() {return std::u16string(1, u'G');}
662 static std::u16string prefix() {return std::u16string(u"giga");}
666 struct ratio_string<giga, char32_t>
668 static std::u32string symbol() {return std::u32string(1, U'G');}
669 static std::u32string prefix() {return std::u32string(U"giga");}
674 #ifndef BOOST_NO_STD_WSTRING
676 struct ratio_string<giga, wchar_t>
678 static std::wstring symbol() {return std::wstring(1, L'G');}
679 static std::wstring prefix() {return std::wstring(L"giga");}
687 #ifdef BOOST_RATIO_HAS_STATIC_STRING
688 template <typename CharT>
689 struct ratio_string<tera, CharT> :
690 ratio_detail::ratio_string_static<tera,CharT>
695 struct ratio_string<tera, char>
697 static std::string symbol() {return std::string(1, 'T');}
698 static std::string prefix() {return std::string("tera");}
701 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
704 struct ratio_string<tera, char16_t>
706 static std::u16string symbol() {return std::u16string(1, u'T');}
707 static std::u16string prefix() {return std::u16string(u"tera");}
711 struct ratio_string<tera, char32_t>
713 static std::u32string symbol() {return std::u32string(1, U'T');}
714 static std::u32string prefix() {return std::u32string(U"tera");}
719 #ifndef BOOST_NO_STD_WSTRING
721 struct ratio_string<tera, wchar_t>
723 static std::wstring symbol() {return std::wstring(1, L'T');}
724 static std::wstring prefix() {return std::wstring(L"tera");}
731 #ifdef BOOST_RATIO_HAS_STATIC_STRING
732 template <typename CharT>
733 struct ratio_string<peta, CharT> :
734 ratio_detail::ratio_string_static<peta,CharT>
739 struct ratio_string<peta, char>
741 static std::string symbol() {return std::string(1, 'P');}
742 static std::string prefix() {return std::string("peta");}
745 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
748 struct ratio_string<peta, char16_t>
750 static std::u16string symbol() {return std::u16string(1, u'P');}
751 static std::u16string prefix() {return std::u16string(u"peta");}
755 struct ratio_string<peta, char32_t>
757 static std::u32string symbol() {return std::u32string(1, U'P');}
758 static std::u32string prefix() {return std::u32string(U"peta");}
763 #ifndef BOOST_NO_STD_WSTRING
765 struct ratio_string<peta, wchar_t>
767 static std::wstring symbol() {return std::wstring(1, L'P');}
768 static std::wstring prefix() {return std::wstring(L"peta");}
775 #ifdef BOOST_RATIO_HAS_STATIC_STRING
776 template <typename CharT>
777 struct ratio_string<exa, CharT> :
778 ratio_detail::ratio_string_static<exa,CharT>
783 struct ratio_string<exa, char>
785 static std::string symbol() {return std::string(1, 'E');}
786 static std::string prefix() {return std::string("exa");}
789 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
792 struct ratio_string<exa, char16_t>
794 static std::u16string symbol() {return std::u16string(1, u'E');}
795 static std::u16string prefix() {return std::u16string(u"exa");}
799 struct ratio_string<exa, char32_t>
801 static std::u32string symbol() {return std::u32string(1, U'E');}
802 static std::u32string prefix() {return std::u32string(U"exa");}
807 #ifndef BOOST_NO_STD_WSTRING
809 struct ratio_string<exa, wchar_t>
811 static std::wstring symbol() {return std::wstring(1, L'E');}
812 static std::wstring prefix() {return std::wstring(L"exa");}
818 #ifdef BOOST_RATIO_EXTENSIONS
820 #ifdef BOOST_RATIO_HAS_STATIC_STRING
821 template <typename CharT>
822 struct ratio_string<kibi, CharT> :
823 ratio_detail::ratio_string_static<kibi,CharT>
828 struct ratio_string<kibi, char>
830 static std::string symbol() {return std::string("Ki");}
831 static std::string prefix() {return std::string("kibi");}
834 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
837 struct ratio_string<kibi, char16_t>
839 static std::u16string symbol() {return std::u16string(u"Ki");}
840 static std::u16string prefix() {return std::u16string(u"kibi");}
844 struct ratio_string<kibi, char32_t>
846 static std::u32string symbol() {return std::u32string(U"Ki");}
847 static std::u32string prefix() {return std::u32string(U"kibi");}
852 #ifndef BOOST_NO_STD_WSTRING
854 struct ratio_string<kibi, wchar_t>
856 static std::wstring symbol() {return std::wstring(L"Ki");}
857 static std::wstring prefix() {return std::wstring(L"kibi");}
862 #ifdef BOOST_RATIO_HAS_STATIC_STRING
863 template <typename CharT>
864 struct ratio_string<mebi, CharT> :
865 ratio_detail::ratio_string_static<mebi,CharT>
870 struct ratio_string<mebi, char>
872 static std::string symbol() {return std::string("Mi");}
873 static std::string prefix() {return std::string("mebi");}
876 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
879 struct ratio_string<mebi, char16_t>
881 static std::u16string symbol() {return std::u16string(u"Mi");}
882 static std::u16string prefix() {return std::u16string(u"mebi");}
886 struct ratio_string<mebi, char32_t>
888 static std::u32string symbol() {return std::u32string(U"Mi");}
889 static std::u32string prefix() {return std::u32string(U"mebi");}
894 #ifndef BOOST_NO_STD_WSTRING
896 struct ratio_string<mebi, wchar_t>
898 static std::wstring symbol() {return std::wstring(L"Mi");}
899 static std::wstring prefix() {return std::wstring(L"mebi");}
904 #ifdef BOOST_RATIO_HAS_STATIC_STRING
905 template <typename CharT>
906 struct ratio_string<gibi, CharT> :
907 ratio_detail::ratio_string_static<gibi,CharT>
912 struct ratio_string<gibi, char>
914 static std::string symbol() {return std::string("Gi");}
915 static std::string prefix() {return std::string("gibi");}
918 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
921 struct ratio_string<gibi, char16_t>
923 static std::u16string symbol() {return std::u16string(u"Gi");}
924 static std::u16string prefix() {return std::u16string(u"gibi");}
928 struct ratio_string<gibi, char32_t>
930 static std::u32string symbol() {return std::u32string(U"Gi");}
931 static std::u32string prefix() {return std::u32string(U"gibi");}
936 #ifndef BOOST_NO_STD_WSTRING
938 struct ratio_string<gibi, wchar_t>
940 static std::wstring symbol() {return std::wstring(L"Gi");}
941 static std::wstring prefix() {return std::wstring(L"gibi");}
946 #ifdef BOOST_RATIO_HAS_STATIC_STRING
947 template <typename CharT>
948 struct ratio_string<tebi, CharT> :
949 ratio_detail::ratio_string_static<tebi,CharT>
954 struct ratio_string<tebi, char>
956 static std::string symbol() {return std::string("Ti");}
957 static std::string prefix() {return std::string("tebi");}
960 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
963 struct ratio_string<tebi, char16_t>
965 static std::u16string symbol() {return std::u16string(u"Ti");}
966 static std::u16string prefix() {return std::u16string(u"tebi");}
970 struct ratio_string<tebi, char32_t>
972 static std::u32string symbol() {return std::u32string(U"Ti");}
973 static std::u32string prefix() {return std::u32string(U"tebi");}
978 #ifndef BOOST_NO_STD_WSTRING
980 struct ratio_string<tebi, wchar_t>
982 static std::wstring symbol() {return std::wstring(L"Ti");}
983 static std::wstring prefix() {return std::wstring(L"tebi");}
988 #ifdef BOOST_RATIO_HAS_STATIC_STRING
989 template <typename CharT>
990 struct ratio_string<pebi, CharT> :
991 ratio_detail::ratio_string_static<pebi,CharT>
996 struct ratio_string<pebi, char>
998 static std::string symbol() {return std::string("Pi");}
999 static std::string prefix() {return std::string("pebi");}
1002 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1005 struct ratio_string<pebi, char16_t>
1007 static std::u16string symbol() {return std::u16string(u"Pi");}
1008 static std::u16string prefix() {return std::u16string(u"pebi");}
1012 struct ratio_string<pebi, char32_t>
1014 static std::u32string symbol() {return std::u32string(U"Pi");}
1015 static std::u32string prefix() {return std::u32string(U"pebi");}
1020 #ifndef BOOST_NO_STD_WSTRING
1022 struct ratio_string<pebi, wchar_t>
1024 static std::wstring symbol() {return std::wstring(L"Pi");}
1025 static std::wstring prefix() {return std::wstring(L"pebi");}
1030 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1031 template <typename CharT>
1032 struct ratio_string<exbi, CharT> :
1033 ratio_detail::ratio_string_static<exbi,CharT>
1038 struct ratio_string<exbi, char>
1040 static std::string symbol() {return std::string("Ei");}
1041 static std::string prefix() {return std::string("exbi");}
1044 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1047 struct ratio_string<exbi, char16_t>
1049 static std::u16string symbol() {return std::u16string(u"Ei");}
1050 static std::u16string prefix() {return std::u16string(u"exbi");}
1054 struct ratio_string<exbi, char32_t>
1056 static std::u32string symbol() {return std::u32string(U"Ei");}
1057 static std::u32string prefix() {return std::u32string(U"exbi");}
1062 #ifndef BOOST_NO_STD_WSTRING
1064 struct ratio_string<exbi, wchar_t>
1066 static std::wstring symbol() {return std::wstring(L"Ei");}
1067 static std::wstring prefix() {return std::wstring(L"exbi");}
1075 #endif // BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
1076 #endif // BOOST_RATIO_RATIO_IO_HPP