This question already has an answer here:
A variant is the obvious example for this:
template <typename... Ts>
class variant {
using types = meta::list<Ts...>;
variant() = default;
template <typename = std::enable_if_t<
meta::all_of<types, meta::quote<std::is_copy_constructible>>{}
>
variant(const variant &);
};
Using Meta to remove TMP boilerplate code around checking to see if all of a parameter pack fulfil a trait.
I know this isn't correct as the copy constructor can't be templated amongst other restrictions. Is this something that is possible to do in a different manner? C++14+ should be fine as I'm using GCC 4.9 and Clang 3.5.
Aucun commentaire:
Enregistrer un commentaire