diff --git a/dlib/global_optimization/find_global_maximum.h b/dlib/global_optimization/find_global_maximum.h index a9c930964..77e3537e7 100644 --- a/dlib/global_optimization/find_global_maximum.h +++ b/dlib/global_optimization/find_global_maximum.h @@ -38,7 +38,9 @@ namespace dlib 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 struct call_with_vect { @@ -64,6 +66,20 @@ namespace dlib return f(disable_decay_to_scalar(a)); } }; +#else + template + struct call_with_vect + { +template static auto go(T&& f, const matrix& a) -> decltype(std::forward(f), disable_decay_to_scalar(a)) {return f(disable_decay_to_scalar(a)); } +template static auto go(T&& f, const matrix& a) -> decltype(std::forward(f), a(0)) { DLIB_CASSERT(a.size() == 1); return f(a(0)); } +template static auto go(T&& f, const matrix& a) -> decltype(std::forward(f), a(0),a(1)) { DLIB_CASSERT(a.size() == 2); return f(a(0),a(1)); } +template static auto go(T&& f, const matrix& a) -> decltype(std::forward(f), a(0), a(1), a(2)) { DLIB_CASSERT(a.size() == 3); return f(a(0), a(1),a(2)); } +template static auto go(T&& f, const matrix& a) -> decltype(std::forward(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 static auto go(T&& f, const matrix& a) -> decltype(std::forward(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 static auto go(T&& f, const matrix& a) -> decltype(std::forward(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 static auto go(T&& f, const matrix& a) -> decltype(std::forward(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 } // ----------------------------------------------------------------------------------------