Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
fmt
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
fmt
Commits
cb682f36
Commit
cb682f36
authored
May 29, 2022
by
Victor Zverovich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move to_string_view to detail
parent
156744ad
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
31 additions
and
54 deletions
+31
-54
include/fmt/color.h
include/fmt/color.h
+4
-4
include/fmt/core.h
include/fmt/core.h
+11
-14
include/fmt/printf.h
include/fmt/printf.h
+7
-6
include/fmt/xchar.h
include/fmt/xchar.h
+9
-8
test/xchar-test.cc
test/xchar-test.cc
+0
-22
No files found.
include/fmt/color.h
View file @
cb682f36
...
@@ -483,7 +483,7 @@ template <typename S, typename Char = char_t<S>>
...
@@ -483,7 +483,7 @@ template <typename S, typename Char = char_t<S>>
void
vprint
(
std
::
FILE
*
f
,
const
text_style
&
ts
,
const
S
&
format
,
void
vprint
(
std
::
FILE
*
f
,
const
text_style
&
ts
,
const
S
&
format
,
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
{
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
{
basic_memory_buffer
<
Char
>
buf
;
basic_memory_buffer
<
Char
>
buf
;
detail
::
vformat_to
(
buf
,
ts
,
to_string_view
(
format
),
args
);
detail
::
vformat_to
(
buf
,
ts
,
detail
::
to_string_view
(
format
),
args
);
if
(
detail
::
is_utf8
())
{
if
(
detail
::
is_utf8
())
{
detail
::
print
(
f
,
basic_string_view
<
Char
>
(
buf
.
begin
(),
buf
.
size
()));
detail
::
print
(
f
,
basic_string_view
<
Char
>
(
buf
.
begin
(),
buf
.
size
()));
}
else
{
}
else
{
...
@@ -533,7 +533,7 @@ inline std::basic_string<Char> vformat(
...
@@ -533,7 +533,7 @@ inline std::basic_string<Char> vformat(
const
text_style
&
ts
,
const
S
&
format_str
,
const
text_style
&
ts
,
const
S
&
format_str
,
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
{
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
{
basic_memory_buffer
<
Char
>
buf
;
basic_memory_buffer
<
Char
>
buf
;
detail
::
vformat_to
(
buf
,
ts
,
to_string_view
(
format_str
),
args
);
detail
::
vformat_to
(
buf
,
ts
,
detail
::
to_string_view
(
format_str
),
args
);
return
fmt
::
to_string
(
buf
);
return
fmt
::
to_string
(
buf
);
}
}
...
@@ -552,7 +552,7 @@ inline std::basic_string<Char> vformat(
...
@@ -552,7 +552,7 @@ inline std::basic_string<Char> vformat(
template
<
typename
S
,
typename
...
Args
,
typename
Char
=
char_t
<
S
>
>
template
<
typename
S
,
typename
...
Args
,
typename
Char
=
char_t
<
S
>
>
inline
std
::
basic_string
<
Char
>
format
(
const
text_style
&
ts
,
const
S
&
format_str
,
inline
std
::
basic_string
<
Char
>
format
(
const
text_style
&
ts
,
const
S
&
format_str
,
const
Args
&
...
args
)
{
const
Args
&
...
args
)
{
return
fmt
::
vformat
(
ts
,
to_string_view
(
format_str
),
return
fmt
::
vformat
(
ts
,
detail
::
to_string_view
(
format_str
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
}
}
...
@@ -587,7 +587,7 @@ template <typename OutputIt, typename S, typename... Args,
...
@@ -587,7 +587,7 @@ template <typename OutputIt, typename S, typename... Args,
inline
auto
format_to
(
OutputIt
out
,
const
text_style
&
ts
,
const
S
&
format_str
,
inline
auto
format_to
(
OutputIt
out
,
const
text_style
&
ts
,
const
S
&
format_str
,
Args
&&
...
args
)
->
Args
&&
...
args
)
->
typename
std
::
enable_if
<
enable
,
OutputIt
>::
type
{
typename
std
::
enable_if
<
enable
,
OutputIt
>::
type
{
return
vformat_to
(
out
,
ts
,
to_string_view
(
format_str
),
return
vformat_to
(
out
,
ts
,
detail
::
to_string_view
(
format_str
),
fmt
::
make_format_args
<
buffer_context
<
char_t
<
S
>>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
char_t
<
S
>>>
(
args
...));
}
}
...
...
include/fmt/core.h
View file @
cb682f36
...
@@ -493,6 +493,15 @@ using string_view = basic_string_view<char>;
...
@@ -493,6 +493,15 @@ using string_view = basic_string_view<char>;
template
<
typename
T
>
struct
is_char
:
std
::
false_type
{};
template
<
typename
T
>
struct
is_char
:
std
::
false_type
{};
template
<
>
struct
is_char
<
char
>
:
std
::
true_type
{};
template
<
>
struct
is_char
<
char
>
:
std
::
true_type
{};
// A base class for compile-time strings. It is defined in the fmt namespace to
// make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42).
struct
compile_string
{};
template
<
typename
S
>
struct
is_compile_string
:
std
::
is_base_of
<
compile_string
,
S
>
{};
FMT_BEGIN_DETAIL_NAMESPACE
// Returns a string view of `s`.
// Returns a string view of `s`.
template
<
typename
Char
,
FMT_ENABLE_IF
(
is_char
<
Char
>
::
value
)
>
template
<
typename
Char
,
FMT_ENABLE_IF
(
is_char
<
Char
>
::
value
)
>
FMT_INLINE
auto
to_string_view
(
const
Char
*
s
)
->
basic_string_view
<
Char
>
{
FMT_INLINE
auto
to_string_view
(
const
Char
*
s
)
->
basic_string_view
<
Char
>
{
...
@@ -509,29 +518,17 @@ constexpr auto to_string_view(basic_string_view<Char> s)
...
@@ -509,29 +518,17 @@ constexpr auto to_string_view(basic_string_view<Char> s)
return
s
;
return
s
;
}
}
template
<
typename
Char
,
template
<
typename
Char
,
FMT_ENABLE_IF
(
!
std
::
is_empty
<
detail
::
std_string_view
<
Char
>
>::
value
)
>
FMT_ENABLE_IF
(
!
std
::
is_empty
<
std_string_view
<
Char
>
>::
value
)
>
inline
auto
to_string_view
(
detail
::
std_string_view
<
Char
>
s
)
inline
auto
to_string_view
(
std_string_view
<
Char
>
s
)
->
basic_string_view
<
Char
>
{
->
basic_string_view
<
Char
>
{
return
s
;
return
s
;
}
}
// A base class for compile-time strings. It is defined in the fmt namespace to
// make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42).
struct
compile_string
{};
template
<
typename
S
>
struct
is_compile_string
:
std
::
is_base_of
<
compile_string
,
S
>
{};
template
<
typename
S
,
FMT_ENABLE_IF
(
is_compile_string
<
S
>
::
value
)
>
template
<
typename
S
,
FMT_ENABLE_IF
(
is_compile_string
<
S
>
::
value
)
>
constexpr
auto
to_string_view
(
const
S
&
s
)
constexpr
auto
to_string_view
(
const
S
&
s
)
->
basic_string_view
<
typename
S
::
char_type
>
{
->
basic_string_view
<
typename
S
::
char_type
>
{
return
basic_string_view
<
typename
S
::
char_type
>
(
s
);
return
basic_string_view
<
typename
S
::
char_type
>
(
s
);
}
}
FMT_BEGIN_DETAIL_NAMESPACE
void
to_string_view
(...);
void
to_string_view
(...);
using
fmt
::
to_string_view
;
// Specifies whether S is a string type convertible to fmt::basic_string_view.
// Specifies whether S is a string type convertible to fmt::basic_string_view.
// It should be a constexpr function but MSVC 2017 fails to compile it in
// It should be a constexpr function but MSVC 2017 fails to compile it in
...
...
include/fmt/printf.h
View file @
cb682f36
...
@@ -560,7 +560,7 @@ inline auto vsprintf(
...
@@ -560,7 +560,7 @@ inline auto vsprintf(
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
->
std
::
basic_string
<
Char
>
{
->
std
::
basic_string
<
Char
>
{
basic_memory_buffer
<
Char
>
buffer
;
basic_memory_buffer
<
Char
>
buffer
;
vprintf
(
buffer
,
to_string_view
(
fmt
),
args
);
vprintf
(
buffer
,
detail
::
to_string_view
(
fmt
),
args
);
return
to_string
(
buffer
);
return
to_string
(
buffer
);
}
}
...
@@ -577,7 +577,8 @@ template <typename S, typename... T,
...
@@ -577,7 +577,8 @@ template <typename S, typename... T,
typename
Char
=
enable_if_t
<
detail
::
is_string
<
S
>
::
value
,
char_t
<
S
>>>
typename
Char
=
enable_if_t
<
detail
::
is_string
<
S
>
::
value
,
char_t
<
S
>>>
inline
auto
sprintf
(
const
S
&
fmt
,
const
T
&
...
args
)
->
std
::
basic_string
<
Char
>
{
inline
auto
sprintf
(
const
S
&
fmt
,
const
T
&
...
args
)
->
std
::
basic_string
<
Char
>
{
using
context
=
basic_printf_context_t
<
Char
>
;
using
context
=
basic_printf_context_t
<
Char
>
;
return
vsprintf
(
to_string_view
(
fmt
),
fmt
::
make_format_args
<
context
>
(
args
...));
return
vsprintf
(
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
context
>
(
args
...));
}
}
template
<
typename
S
,
typename
Char
=
char_t
<
S
>
>
template
<
typename
S
,
typename
Char
=
char_t
<
S
>
>
...
@@ -586,7 +587,7 @@ inline auto vfprintf(
...
@@ -586,7 +587,7 @@ inline auto vfprintf(
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
->
int
{
->
int
{
basic_memory_buffer
<
Char
>
buffer
;
basic_memory_buffer
<
Char
>
buffer
;
vprintf
(
buffer
,
to_string_view
(
fmt
),
args
);
vprintf
(
buffer
,
detail
::
to_string_view
(
fmt
),
args
);
size_t
size
=
buffer
.
size
();
size_t
size
=
buffer
.
size
();
return
std
::
fwrite
(
buffer
.
data
(),
sizeof
(
Char
),
size
,
f
)
<
size
return
std
::
fwrite
(
buffer
.
data
(),
sizeof
(
Char
),
size
,
f
)
<
size
?
-
1
?
-
1
...
@@ -605,7 +606,7 @@ inline auto vfprintf(
...
@@ -605,7 +606,7 @@ inline auto vfprintf(
template
<
typename
S
,
typename
...
T
,
typename
Char
=
char_t
<
S
>
>
template
<
typename
S
,
typename
...
T
,
typename
Char
=
char_t
<
S
>
>
inline
auto
fprintf
(
std
::
FILE
*
f
,
const
S
&
fmt
,
const
T
&
...
args
)
->
int
{
inline
auto
fprintf
(
std
::
FILE
*
f
,
const
S
&
fmt
,
const
T
&
...
args
)
->
int
{
using
context
=
basic_printf_context_t
<
Char
>
;
using
context
=
basic_printf_context_t
<
Char
>
;
return
vfprintf
(
f
,
to_string_view
(
fmt
),
return
vfprintf
(
f
,
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
context
>
(
args
...));
fmt
::
make_format_args
<
context
>
(
args
...));
}
}
...
@@ -614,7 +615,7 @@ inline auto vprintf(
...
@@ -614,7 +615,7 @@ inline auto vprintf(
const
S
&
fmt
,
const
S
&
fmt
,
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
basic_format_args
<
basic_printf_context_t
<
type_identity_t
<
Char
>>>
args
)
->
int
{
->
int
{
return
vfprintf
(
stdout
,
to_string_view
(
fmt
),
args
);
return
vfprintf
(
stdout
,
detail
::
to_string_view
(
fmt
),
args
);
}
}
/**
/**
...
@@ -629,7 +630,7 @@ inline auto vprintf(
...
@@ -629,7 +630,7 @@ inline auto vprintf(
template
<
typename
S
,
typename
...
T
,
FMT_ENABLE_IF
(
detail
::
is_string
<
S
>
::
value
)
>
template
<
typename
S
,
typename
...
T
,
FMT_ENABLE_IF
(
detail
::
is_string
<
S
>
::
value
)
>
inline
auto
printf
(
const
S
&
fmt
,
const
T
&
...
args
)
->
int
{
inline
auto
printf
(
const
S
&
fmt
,
const
T
&
...
args
)
->
int
{
return
vprintf
(
return
vprintf
(
to_string_view
(
fmt
),
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
basic_printf_context_t
<
char_t
<
S
>>>
(
args
...));
fmt
::
make_format_args
<
basic_printf_context_t
<
char_t
<
S
>>>
(
args
...));
}
}
...
...
include/fmt/xchar.h
View file @
cb682f36
...
@@ -92,7 +92,7 @@ auto vformat(basic_string_view<Char> format_str,
...
@@ -92,7 +92,7 @@ auto vformat(basic_string_view<Char> format_str,
template
<
typename
S
,
typename
...
Args
,
typename
Char
=
char_t
<
S
>,
template
<
typename
S
,
typename
...
Args
,
typename
Char
=
char_t
<
S
>,
FMT_ENABLE_IF
(
!
std
::
is_same
<
Char
,
char
>::
value
)
>
FMT_ENABLE_IF
(
!
std
::
is_same
<
Char
,
char
>::
value
)
>
auto
format
(
const
S
&
format_str
,
Args
&&
...
args
)
->
std
::
basic_string
<
Char
>
{
auto
format
(
const
S
&
format_str
,
Args
&&
...
args
)
->
std
::
basic_string
<
Char
>
{
return
vformat
(
to_string_view
(
format_str
),
return
vformat
(
detail
::
to_string_view
(
format_str
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
}
}
...
@@ -103,7 +103,7 @@ inline auto vformat(
...
@@ -103,7 +103,7 @@ inline auto vformat(
const
Locale
&
loc
,
const
S
&
format_str
,
const
Locale
&
loc
,
const
S
&
format_str
,
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
->
std
::
basic_string
<
Char
>
{
->
std
::
basic_string
<
Char
>
{
return
detail
::
vformat
(
loc
,
to_string_view
(
format_str
),
args
);
return
detail
::
vformat
(
loc
,
detail
::
to_string_view
(
format_str
),
args
);
}
}
template
<
typename
Locale
,
typename
S
,
typename
...
Args
,
template
<
typename
Locale
,
typename
S
,
typename
...
Args
,
...
@@ -112,7 +112,7 @@ template <typename Locale, typename S, typename... Args,
...
@@ -112,7 +112,7 @@ template <typename Locale, typename S, typename... Args,
detail
::
is_exotic_char
<
Char
>::
value
)
>
detail
::
is_exotic_char
<
Char
>::
value
)
>
inline
auto
format
(
const
Locale
&
loc
,
const
S
&
format_str
,
Args
&&
...
args
)
inline
auto
format
(
const
Locale
&
loc
,
const
S
&
format_str
,
Args
&&
...
args
)
->
std
::
basic_string
<
Char
>
{
->
std
::
basic_string
<
Char
>
{
return
detail
::
vformat
(
loc
,
to_string_view
(
format_str
),
return
detail
::
vformat
(
loc
,
detail
::
to_string_view
(
format_str
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
}
}
...
@@ -123,7 +123,7 @@ auto vformat_to(OutputIt out, const S& format_str,
...
@@ -123,7 +123,7 @@ auto vformat_to(OutputIt out, const S& format_str,
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
->
OutputIt
{
->
OutputIt
{
auto
&&
buf
=
detail
::
get_buffer
<
Char
>
(
out
);
auto
&&
buf
=
detail
::
get_buffer
<
Char
>
(
out
);
detail
::
vformat_to
(
buf
,
to_string_view
(
format_str
),
args
);
detail
::
vformat_to
(
buf
,
detail
::
to_string_view
(
format_str
),
args
);
return
detail
::
get_iterator
(
buf
);
return
detail
::
get_iterator
(
buf
);
}
}
...
@@ -132,7 +132,7 @@ template <typename OutputIt, typename S, typename... Args,
...
@@ -132,7 +132,7 @@ template <typename OutputIt, typename S, typename... Args,
FMT_ENABLE_IF
(
detail
::
is_output_iterator
<
OutputIt
,
Char
>::
value
&&
FMT_ENABLE_IF
(
detail
::
is_output_iterator
<
OutputIt
,
Char
>::
value
&&
detail
::
is_exotic_char
<
Char
>::
value
)
>
detail
::
is_exotic_char
<
Char
>::
value
)
>
inline
auto
format_to
(
OutputIt
out
,
const
S
&
fmt
,
Args
&&
...
args
)
->
OutputIt
{
inline
auto
format_to
(
OutputIt
out
,
const
S
&
fmt
,
Args
&&
...
args
)
->
OutputIt
{
return
vformat_to
(
out
,
to_string_view
(
fmt
),
return
vformat_to
(
out
,
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
}
}
...
@@ -145,7 +145,8 @@ inline auto vformat_to(
...
@@ -145,7 +145,8 @@ inline auto vformat_to(
OutputIt
out
,
const
Locale
&
loc
,
const
S
&
format_str
,
OutputIt
out
,
const
Locale
&
loc
,
const
S
&
format_str
,
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
->
OutputIt
{
basic_format_args
<
buffer_context
<
type_identity_t
<
Char
>>>
args
)
->
OutputIt
{
auto
&&
buf
=
detail
::
get_buffer
<
Char
>
(
out
);
auto
&&
buf
=
detail
::
get_buffer
<
Char
>
(
out
);
vformat_to
(
buf
,
to_string_view
(
format_str
),
args
,
detail
::
locale_ref
(
loc
));
vformat_to
(
buf
,
detail
::
to_string_view
(
format_str
),
args
,
detail
::
locale_ref
(
loc
));
return
detail
::
get_iterator
(
buf
);
return
detail
::
get_iterator
(
buf
);
}
}
...
@@ -180,7 +181,7 @@ template <typename OutputIt, typename S, typename... Args,
...
@@ -180,7 +181,7 @@ template <typename OutputIt, typename S, typename... Args,
detail
::
is_exotic_char
<
Char
>::
value
)
>
detail
::
is_exotic_char
<
Char
>::
value
)
>
inline
auto
format_to_n
(
OutputIt
out
,
size_t
n
,
const
S
&
fmt
,
inline
auto
format_to_n
(
OutputIt
out
,
size_t
n
,
const
S
&
fmt
,
const
Args
&
...
args
)
->
format_to_n_result
<
OutputIt
>
{
const
Args
&
...
args
)
->
format_to_n_result
<
OutputIt
>
{
return
vformat_to_n
(
out
,
n
,
to_string_view
(
fmt
),
return
vformat_to_n
(
out
,
n
,
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
}
}
...
@@ -188,7 +189,7 @@ template <typename S, typename... Args, typename Char = char_t<S>,
...
@@ -188,7 +189,7 @@ template <typename S, typename... Args, typename Char = char_t<S>,
FMT_ENABLE_IF
(
detail
::
is_exotic_char
<
Char
>::
value
)
>
FMT_ENABLE_IF
(
detail
::
is_exotic_char
<
Char
>::
value
)
>
inline
auto
formatted_size
(
const
S
&
fmt
,
Args
&&
...
args
)
->
size_t
{
inline
auto
formatted_size
(
const
S
&
fmt
,
Args
&&
...
args
)
->
size_t
{
detail
::
counting_buffer
<
Char
>
buf
;
detail
::
counting_buffer
<
Char
>
buf
;
detail
::
vformat_to
(
buf
,
to_string_view
(
fmt
),
detail
::
vformat_to
(
buf
,
detail
::
to_string_view
(
fmt
),
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
fmt
::
make_format_args
<
buffer_context
<
Char
>>
(
args
...));
return
buf
.
count
();
return
buf
.
count
();
}
}
...
...
test/xchar-test.cc
View file @
cb682f36
...
@@ -240,28 +240,6 @@ TEST(xchar_test, sign_not_truncated) {
...
@@ -240,28 +240,6 @@ TEST(xchar_test, sign_not_truncated) {
EXPECT_THROW
(
fmt
::
format
(
format_str
,
42
),
fmt
::
format_error
);
EXPECT_THROW
(
fmt
::
format
(
format_str
,
42
),
fmt
::
format_error
);
}
}
namespace
fake_qt
{
class
QString
{
public:
QString
(
const
wchar_t
*
s
)
:
s_
(
s
)
{}
const
wchar_t
*
utf16
()
const
noexcept
{
return
s_
.
data
();
}
int
size
()
const
noexcept
{
return
static_cast
<
int
>
(
s_
.
size
());
}
private:
std
::
wstring
s_
;
};
fmt
::
basic_string_view
<
wchar_t
>
to_string_view
(
const
QString
&
s
)
noexcept
{
return
{
s
.
utf16
(),
static_cast
<
size_t
>
(
s
.
size
())};
}
}
// namespace fake_qt
TEST
(
format_test
,
format_foreign_strings
)
{
using
fake_qt
::
QString
;
EXPECT_EQ
(
fmt
::
format
(
QString
(
L"{}"
),
42
),
L"42"
);
EXPECT_EQ
(
fmt
::
format
(
QString
(
L"{}"
),
QString
(
L"42"
)),
L"42"
);
}
TEST
(
xchar_test
,
chrono
)
{
TEST
(
xchar_test
,
chrono
)
{
auto
tm
=
std
::
tm
();
auto
tm
=
std
::
tm
();
tm
.
tm_year
=
116
;
tm
.
tm_year
=
116
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment