#pragma once // bind.hpp - Like std::bind, but with arbitrary arguments. // // Copyright © 2012 Ben Longbons // // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include #include "fwd.hpp" namespace tmwa { namespace sexpr { template struct VariadicBind { // note: may be lvalue references F&& f; T&& t; template auto operator()(A&&... a) -> decltype(std::forward(f)(std::forward(t), std::forward(a)...)) { return std::forward(f)(std::forward(t), std::forward(a)...); } }; template VariadicBind bind_variadic(F&& func, T&& arg1) { return VariadicBind{std::forward(func), std::forward(arg1)}; } } // namespace sexpr } // namespace tmwa