История изменений
Исправление
pavlick,
(текущая версия)
:
Ага, наверное они для засолки огурцов. Вообще можно даже без концептов проверку типов сделать, за 10 минут на коленках написал:
#include <functional>
#include <type_traits>
using namespace std;
template <class T>
void test(T &&fn)
{
using fn_t = decltype(function(fn));
static_assert(same_as<fn_t, function<void(int)>>, "wrong type of function");
}
void f(int) {}
int main() {
test([](double){}); // error
test([](int){return 0;}); // error
test(f); // ok
test([](int){}); // ok
}
ПС: но можно и на концептах
Исходная версия
pavlick,
:
Ага, наверное они для засолки огурцов. Вообще можно даже без концептов проверку типов сделать, за 10 минут на коленках написал:
#include <functional>
#include <type_traits>
using namespace std;
template <class T>
void test(T &&fn)
{
using fn_t = decltype(function(fn));
static_assert(same_as<fn_t, function<void(int)>>, "wrong type of function");
}
void f(int) {}
int main() {
test([](double){}); // error
test([](int){return 0;}); // error
test(f); // ok
test([](int){}); // ok
}