Explanation:
Checking if a special operator exist in a template parameter is easy (with help of this answer).
The following code checks if char operator[]
exists in Type
or not:
template <class Type>
class HasStringOperator
{
template <typename T, T> struct TypeCheck;
typedef char Yes;
typedef long No;
template <typename T> struct operator_{
typedef char (T::*fptr)(int);
};
template <typename T> static Yes HasOperator(TypeCheck< typename operator_<T>::fptr, &T::operator[] >*);
template <typename T> static No HasOperator(...);
public:
static bool const value = (sizeof(HasOperator<Type>(0)) == sizeof(Yes));
};
Problem:
Now I want to check if all of my variadic template parameters have that operator. I can't figure out how to send them one by one to HasStringOperator
and check the whole result.
template < class... Word>
class Sentence
{
static_assert(Do all of Words have 'char operator[]'?);
};
What should I do?