LINUX.ORG.RU

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

Исправление 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
}