Work around visual studio's lack of C++11 support.

This commit is contained in:
Davis King 2017-11-16 21:45:43 -05:00
parent 9f6ad63b06
commit 11145541ea

View File

@ -38,7 +38,9 @@ namespace dlib
return f(a(indices-1)...); return f(a(indices-1)...);
} }
// Visual studio, as of November 2017, doesn't support C++11 and can't compile this code.
// So we write the terrible garbage in the #else for visual studio. When Visual Studio supports C++11 I'll update this #ifdef to use the C++11 code.
#ifndef _MSC_VER
template <size_t max_unpack> template <size_t max_unpack>
struct call_with_vect struct call_with_vect
{ {
@ -64,6 +66,20 @@ namespace dlib
return f(disable_decay_to_scalar(a)); return f(disable_decay_to_scalar(a));
} }
}; };
#else
template <size_t max_unpack>
struct call_with_vect
{
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), disable_decay_to_scalar(a)) {return f(disable_decay_to_scalar(a)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0)) { DLIB_CASSERT(a.size() == 1); return f(a(0)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0),a(1)) { DLIB_CASSERT(a.size() == 2); return f(a(0),a(1)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0), a(1), a(2)) { DLIB_CASSERT(a.size() == 3); return f(a(0), a(1),a(2)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0), a(1), a(2), a(3)) { DLIB_CASSERT(a.size() == 4); return f(a(0), a(1), a(2), a(3)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0), a(1), a(2), a(3), a(4)) { DLIB_CASSERT(a.size() == 5); return f(a(0), a(1), a(2), a(3), a(4)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0), a(1), a(2), a(3), a(4), a(5)) { DLIB_CASSERT(a.size() == 6); return f(a(0), a(1), a(2), a(3), a(4), a(5)); }
template <typename T> static auto go(T&& f, const matrix<double, 0, 1>& a) -> decltype(std::forward<T>(f), a(0), a(1), a(2), a(3), a(4), a(5), a(6)) { DLIB_CASSERT(a.size() == 7); return f(a(0), a(1), a(2), a(3), a(4), a(5), a(6)); }
};
#endif
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------