//rbindv header //Copyright (c) 2014 mmYYmmdd #if !defined MMYYMMDD_RBIND_AND_PLACEHOLDERS_INCLUDED #define MMYYMMDD_RBIND_AND_PLACEHOLDERS_INCLUDED #include namespace mymd { namespace detail_bind { struct nil {}; //============================================================================ template struct indEx_sequence { static constexpr std::size_t size() { return sizeof...(indices); } }; // linear recursion is sufficient for bind parameters 線形再帰で十分 template , bool flag = (first >= last)> struct indEx_range_imple { using type = result; }; template struct indEx_range_imple, false> : indEx_range_imple> {}; template using indEx_range = typename indEx_range_imple::type; /* when std::make_index_sequence can be used template using indEx_sequence = std::index_sequence; template struct indEx_range_imple; template struct indEx_range_imple, sig> { using type = std::index_sequence; }; template using indEx_range = typename indEx_range_imple, sig>::type; */ //+******************************************************************************************* // remove_rvalue_reference template struct remove_rvaluE_reference { using type = T; }; template struct remove_rvaluE_reference { using type = T; }; template using remove_rvaluE_reference_t = typename remove_rvaluE_reference::type; //================================================================== //parameter buffer パラメータバッファ template struct param_buf { T val; //std::unique_ptr using type = T; param_buf(T&& t) : val(std::forward(t)) { } T& get() { return val; } }; //************************************************************************************************ //parameter adaptation judge by Tr::value template