concept_map 使って aspect-oriented に書こうとすると,異なる concept_map 導入する関数を各々書く感じになるんかにぇ?
concept G<T> { void do(T &); } template<G T> concept SynchronizedG<std::pair<T, std::mutex>> : G<std::pair<T, std::mutex>> { void do(std::pair<T, std::mutex> &p){ std::unique_lock lk(p.second); G::do(p.first); } } template<G T> void g(T const &t) { do(t); } template<G T> void synchronized_g(T const &t) { using SynchronizedG<T>; g(std::make_pair(t, std::mutex())); }