diff options
Diffstat (limited to 'external/include/glm/gtx/string_cast.inl')
-rw-r--r-- | external/include/glm/gtx/string_cast.inl | 290 |
1 files changed, 162 insertions, 128 deletions
diff --git a/external/include/glm/gtx/string_cast.inl b/external/include/glm/gtx/string_cast.inl index 19f136b..e237e8e 100644 --- a/external/include/glm/gtx/string_cast.inl +++ b/external/include/glm/gtx/string_cast.inl @@ -7,13 +7,25 @@ namespace glm{ namespace detail { + template <typename T> + struct cast + { + typedef T value_type; + }; + + template <> + struct cast<float> + { + typedef double value_type; + }; + GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) { std::size_t const STRING_BUFFER(4096); char text[STRING_BUFFER]; va_list list; - if(msg == 0) + if(msg == GLM_NULLPTR) return std::string(); va_start(list, msg); @@ -30,119 +42,119 @@ namespace detail static const char* LabelTrue = "true"; static const char* LabelFalse = "false"; - template <typename T, bool isFloat = false> + template<typename T, bool isFloat = false> struct literal { - GLM_FUNC_QUALIFIER static char const * value() {return "%d";}; + GLM_FUNC_QUALIFIER static char const * value() {return "%d";} }; - template <typename T> + template<typename T> struct literal<T, true> { - GLM_FUNC_QUALIFIER static char const * value() {return "%f";}; + GLM_FUNC_QUALIFIER static char const * value() {return "%f";} }; # if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template <> + template<> struct literal<uint64_t, false> { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";}; + GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} }; - template <> + template<> struct literal<int64_t, false> { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";}; + GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} }; # endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template <typename T> + template<typename T> struct prefix{}; - template <> + template<> struct prefix<float> { - GLM_FUNC_QUALIFIER static char const * value() {return "";}; + GLM_FUNC_QUALIFIER static char const * value() {return "";} }; - template <> + template<> struct prefix<double> { - GLM_FUNC_QUALIFIER static char const * value() {return "d";}; + GLM_FUNC_QUALIFIER static char const * value() {return "d";} }; - template <> + template<> struct prefix<bool> { - GLM_FUNC_QUALIFIER static char const * value() {return "b";}; + GLM_FUNC_QUALIFIER static char const * value() {return "b";} }; - template <> + template<> struct prefix<uint8_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "u8";}; + GLM_FUNC_QUALIFIER static char const * value() {return "u8";} }; - template <> + template<> struct prefix<int8_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "i8";}; + GLM_FUNC_QUALIFIER static char const * value() {return "i8";} }; - template <> + template<> struct prefix<uint16_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "u16";}; + GLM_FUNC_QUALIFIER static char const * value() {return "u16";} }; - template <> + template<> struct prefix<int16_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "i16";}; + GLM_FUNC_QUALIFIER static char const * value() {return "i16";} }; - template <> + template<> struct prefix<uint32_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "u";}; + GLM_FUNC_QUALIFIER static char const * value() {return "u";} }; - template <> + template<> struct prefix<int32_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "i";}; + GLM_FUNC_QUALIFIER static char const * value() {return "i";} }; - template <> + template<> struct prefix<uint64_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "u64";}; + GLM_FUNC_QUALIFIER static char const * value() {return "u64";} }; - template <> + template<> struct prefix<int64_t> { - GLM_FUNC_QUALIFIER static char const * value() {return "i64";}; + GLM_FUNC_QUALIFIER static char const * value() {return "i64";} }; - template <template <typename, precision> class matType, typename T, precision P> + template<typename matType> struct compute_to_string {}; - template <precision P> - struct compute_to_string<tvec1, bool, P> + template<qualifier Q> + struct compute_to_string<vec<1, bool, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec1<bool, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) { return detail::format("bvec1(%s)", x[0] ? detail::LabelTrue : detail::LabelFalse); } }; - template <precision P> - struct compute_to_string<tvec2, bool, P> + template<qualifier Q> + struct compute_to_string<vec<2, bool, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec2<bool, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) { return detail::format("bvec2(%s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, @@ -150,10 +162,10 @@ namespace detail } }; - template <precision P> - struct compute_to_string<tvec3, bool, P> + template<qualifier Q> + struct compute_to_string<vec<3, bool, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec3<bool, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) { return detail::format("bvec3(%s, %s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, @@ -162,10 +174,10 @@ namespace detail } }; - template <precision P> - struct compute_to_string<tvec4, bool, P> + template<qualifier Q> + struct compute_to_string<vec<4, bool, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec4<bool, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) { return detail::format("bvec4(%s, %s, %s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, @@ -175,10 +187,10 @@ namespace detail } }; - template <typename T, precision P> - struct compute_to_string<tvec1, T, P> + template<typename T, qualifier Q> + struct compute_to_string<vec<1, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec1<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -186,14 +198,15 @@ namespace detail PrefixStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x[0]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x[0])); } }; - template <typename T, precision P> - struct compute_to_string<tvec2, T, P> + template<typename T, qualifier Q> + struct compute_to_string<vec<2, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec2<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -201,14 +214,16 @@ namespace detail PrefixStr, LiteralStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x[0], x[1]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x[0]), + static_cast<typename cast<T>::value_type>(x[1])); } }; - template <typename T, precision P> - struct compute_to_string<tvec3, T, P> + template<typename T, qualifier Q> + struct compute_to_string<vec<3, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec3<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -216,14 +231,17 @@ namespace detail PrefixStr, LiteralStr, LiteralStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x[0], x[1], x[2]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x[0]), + static_cast<typename cast<T>::value_type>(x[1]), + static_cast<typename cast<T>::value_type>(x[2])); } }; - template <typename T, precision P> - struct compute_to_string<tvec4, T, P> + template<typename T, qualifier Q> + struct compute_to_string<vec<4, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tvec4<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -231,15 +249,19 @@ namespace detail PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x[0], x[1], x[2], x[3]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x[0]), + static_cast<typename cast<T>::value_type>(x[1]), + static_cast<typename cast<T>::value_type>(x[2]), + static_cast<typename cast<T>::value_type>(x[3])); } }; - template <typename T, precision P> - struct compute_to_string<tmat2x2, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<2, 2, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat2x2<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -249,15 +271,15 @@ namespace detail LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], - x[1][0], x[1][1]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1])); } }; - template <typename T, precision P> - struct compute_to_string<tmat2x3, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<2, 3, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat2x3<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -267,15 +289,15 @@ namespace detail LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], - x[1][0], x[1][1], x[1][2]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2])); } }; - template <typename T, precision P> - struct compute_to_string<tmat2x4, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<2, 4, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat2x4<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -285,15 +307,15 @@ namespace detail LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], x[0][3], - x[1][0], x[1][1], x[1][2], x[1][3]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3])); } }; - template <typename T, precision P> - struct compute_to_string<tmat3x2, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<3, 2, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat3x2<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -304,16 +326,16 @@ namespace detail LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], - x[1][0], x[1][1], - x[2][0], x[2][1]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1])); } }; - template <typename T, precision P> - struct compute_to_string<tmat3x3, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<3, 3, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat3x3<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -324,16 +346,16 @@ namespace detail LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], - x[1][0], x[1][1], x[1][2], - x[2][0], x[2][1], x[2][2]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2])); } }; - template <typename T, precision P> - struct compute_to_string<tmat3x4, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<3, 4, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat3x4<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -344,16 +366,16 @@ namespace detail LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], x[0][3], - x[1][0], x[1][1], x[1][2], x[1][3], - x[2][0], x[2][1], x[2][2], x[2][3]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3])); } }; - template <typename T, precision P> - struct compute_to_string<tmat4x2, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<4, 2, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat4x2<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -365,17 +387,17 @@ namespace detail LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], - x[1][0], x[1][1], - x[2][0], x[2][1], - x[3][0], x[3][1]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), + static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1])); } }; - template <typename T, precision P> - struct compute_to_string<tmat4x3, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<4, 3, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat4x3<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -387,17 +409,17 @@ namespace detail LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], - x[1][0], x[1][1], x[1][2], - x[2][0], x[2][1], x[2][2], - x[3][0], x[3][1], x[3][2]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), + static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2])); } }; - template <typename T, precision P> - struct compute_to_string<tmat4x4, T, P> + template<typename T, qualifier Q> + struct compute_to_string<mat<4, 4, T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tmat4x4<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); @@ -409,50 +431,62 @@ namespace detail LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), - x[0][0], x[0][1], x[0][2], x[0][3], - x[1][0], x[1][1], x[1][2], x[1][3], - x[2][0], x[2][1], x[2][2], x[2][3], - x[3][0], x[3][1], x[3][2], x[3][3]); + static_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]), + static_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]), + static_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]), + static_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]), static_cast<typename cast<T>::value_type>(x[3][3])); } }; - template <typename T, precision P> - struct compute_to_string<tquat, T, P> + template<typename T, qualifier Q> + struct compute_to_string<tquat<T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tquat<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(tquat<T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); - std::string FormatStr(detail::format("%squat(%s, %s, %s, %s)", + std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x[0], x[1], x[2], x[3]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x[3]), + static_cast<typename cast<T>::value_type>(x[0]), + static_cast<typename cast<T>::value_type>(x[1]), + static_cast<typename cast<T>::value_type>(x[2])); } }; - template <typename T, precision P> - struct compute_to_string<tdualquat, T, P> + template<typename T, qualifier Q> + struct compute_to_string<tdualquat<T, Q> > { - GLM_FUNC_QUALIFIER static std::string call(tdualquat<T, P> const & x) + GLM_FUNC_QUALIFIER static std::string call(tdualquat<T, Q> const& x) { char const * PrefixStr = prefix<T>::value(); char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value(); - std::string FormatStr(detail::format("%sdualquat((%s, %s, %s, %s), (%s, %s, %s, %s))", + std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - return detail::format(FormatStr.c_str(), x.real[0], x.real[1], x.real[2], x.real[3], x.dual[0], x.dual[1], x.dual[2], x.dual[3]); + return detail::format(FormatStr.c_str(), + static_cast<typename cast<T>::value_type>(x.real[3]), + static_cast<typename cast<T>::value_type>(x.real[0]), + static_cast<typename cast<T>::value_type>(x.real[1]), + static_cast<typename cast<T>::value_type>(x.real[2]), + static_cast<typename cast<T>::value_type>(x.dual[3]), + static_cast<typename cast<T>::value_type>(x.dual[0]), + static_cast<typename cast<T>::value_type>(x.dual[1]), + static_cast<typename cast<T>::value_type>(x.dual[2])); } }; }//namespace detail -template <template <typename, precision> class matType, typename T, precision P> -GLM_FUNC_QUALIFIER std::string to_string(matType<T, P> const & x) +template<class matType> +GLM_FUNC_QUALIFIER std::string to_string(matType const& x) { - return detail::compute_to_string<matType, T, P>::call(x); + return detail::compute_to_string<matType>::call(x); } }//namespace glm |