WinLamb, as the name itself implies, is heavily based on lambda functions. While searching a way to enforce the lambda signatures in the upcoming C++17 release, I received an incredible answer on StackOverflow:
#include <functional>
#include <type_traits>
template<typename F>
auto foo(F&& func) noexcept ->
std::enable_if_t<
std::is_same_v<
decltype(std::function{std::forward<F>(func)}),
std::function<void(int)>
>, void
>
{
func(33);
}
Up to this point, I was completely unaware of the existence of trailing return types in function declarations.
The validation is extremely restrict, serving my purposes perfectly. And it seems that the upcoming C++20 concepts feature can simplify it quite a lot.
No comments:
Post a Comment