Provide useful and unambigous stringification for static arrays

This commit is contained in:
Martin Hořeňovský
2018-01-14 18:06:21 +01:00
parent f0909dfe02
commit 8d854c689b
7 changed files with 118 additions and 20 deletions

View File

@@ -136,18 +136,6 @@ namespace Catch {
static std::string convert(wchar_t * str);
};
template<typename T>
struct is_string_array : std::false_type {};
template<std::size_t N>
struct is_string_array<char[N]> : std::true_type {};
template<std::size_t N>
struct is_string_array<signed char[N]> : std::true_type {};
template<std::size_t N>
struct is_string_array<unsigned char[N]> : std::true_type {};
template<int SZ>
struct StringMaker<char[SZ]> {
static std::string convert(const char* str) {
@@ -399,12 +387,20 @@ namespace Catch {
}
template<typename R>
struct StringMaker<R, typename std::enable_if<is_range<R>::value && !is_string_array<R>::value>::type> {
struct StringMaker<R, typename std::enable_if<is_range<R>::value && !std::is_array<R>::value>::type> {
static std::string convert( R const& range ) {
return rangeToString( range );
}
};
template <typename T, int SZ>
struct StringMaker<T[SZ]> {
static std::string convert(T const(&arr)[SZ]) {
return rangeToString(arr);
}
};
} // namespace Catch
// Separate std::chrono::duration specialization