LINUX.ORG.RU

История изменений

Исправление rumgot, (текущая версия) :

ox55ff
Или так для C++11 / C++14 :

#include <iostream>
#include <type_traits>

// int foo(int a, int b) { return 1; }

int foo(int a, int b, bool c) { return 0; }

template <int (*f)(int, int, bool)>
static auto setupTempl(int a, int b) -> decltype(f(a, b, true)) {
  return f(a, b, true);
}

template <int (*f)(int, int)>
static auto setupTempl(int a, int b) -> decltype(f(a, b)) {
  return f(a, b);
}

int main() {
  setupTempl<foo>(1, 2);
  return 0;
}

Исправление rumgot, :

ox55ff
Или так для C++14 :

#include <iostream>
#include <type_traits>

//int foo(int a, int b) { return 1; }

 int foo(int a, int b, bool c) { return 0; }

template <int (*f)(int, int, bool)>
static auto setupTempl(int a, int b) -> decltype(f(a, b, true)) {
  return f(a, b, true);
}

template <int (*f)(int, int)>
static auto setupTempl(int a, int b) -> decltype(f(a, b)) {
  return f(a, b);
}

int main() {
  setupTempl<foo>(1, 2);
  return 0;
}

Исходная версия rumgot, :

ox55ff
Или так для C++14 :

#include <iostream>
#include <type_traits>

// int foo(int a, int b)
// {
//      return 1;
// }

int foo(int a, int b, bool c) { return 0; }

template <int (*f)(int, int, bool)>
static auto setupTempl(int a, int b) -> decltype(f(a, b, true)) {
  return f(a, b, true);
}

template <int (*f)(int, int)>
static auto setupTempl(int a, int b) -> decltype(f(a, b)) {
  return f(a, b);
}

int main() {
  setupTempl<foo>(1, 2);
  return 0;
}