Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorPhil Nash2018-01-04 10:21:52 +0000
committerPhil Nash2018-01-04 10:21:52 +0000
commit32eb90b9bdaf45bb1d76ca8bc4efaa3aeaf9a134 (patch)
tree56575c4e1199eca7cf0a7062c4c2368e7d61538a /include
parent702cfdaf6e3e79f4485190d7f3b4beb2d12ac854 (diff)
downloadcatch3-32eb90b9bdaf45bb1d76ca8bc4efaa3aeaf9a134.tar.gz
Fix stringifying of unknown enums
Diffstat (limited to 'include')
-rw-r--r--include/internal/catch_tostring.h34
1 files changed, 22 insertions, 12 deletions
diff --git a/include/internal/catch_tostring.h b/include/internal/catch_tostring.h
index 2e7091ad..5ca019fc 100644
--- a/include/internal/catch_tostring.h
+++ b/include/internal/catch_tostring.h
@@ -57,25 +57,38 @@ namespace Catch {
static const bool value = decltype(test<std::ostream, const T&>(0))::value;
};
+ template<typename E>
+ std::string convertUnknownEnumToString( E e );
+
+ template<typename T>
+ typename std::enable_if<!std::is_enum<T>::value, std::string>::type convertUnstreamable( T const& ) {
+ return Detail::unprintableString;
+ };
+ template<typename T>
+ typename std::enable_if<std::is_enum<T>::value, std::string>::type convertUnstreamable( T const& value ) {
+ return convertUnknownEnumToString( value );
+ };
+
} // namespace Detail
+
// If we decide for C++14, change these to enable_if_ts
template <typename T, typename = void>
struct StringMaker {
template <typename Fake = T>
static
typename std::enable_if<::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
- convert(const Fake& t) {
+ convert(const Fake& value) {
ReusableStringStream rss;
- rss << t;
+ rss << value;
return rss.str();
}
template <typename Fake = T>
static
typename std::enable_if<!::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
- convert(const Fake&) {
- return Detail::unprintableString;
+ convert( const Fake& value ) {
+ return Detail::convertUnstreamable( value );
}
};
@@ -88,8 +101,12 @@ namespace Catch {
return ::Catch::StringMaker<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::convert(e);
}
- } // namespace Detail
+ template<typename E>
+ std::string convertUnknownEnumToString( E e ) {
+ return ::Catch::Detail::stringify(static_cast<typename std::underlying_type<E>::type>(e));
+ }
+ } // namespace Detail
// Some predefined specializations
@@ -233,13 +250,6 @@ namespace Catch {
}
}
- template<typename T>
- struct EnumStringMaker {
- static std::string convert(const T& t) {
- return ::Catch::Detail::stringify(static_cast<typename std::underlying_type<T>::type>(t));
- }
- };
-
#ifdef __OBJC__
template<>
struct StringMaker<NSString*> {