Можно ли проверить, является ли переменная-член, функция-член или определение типа объявлена в заданном классе?
Различные вопросы в StackOverflow говорят о проверке того, содержит ли данный класс только элемент, по существу используя std:: is_detected. Но все эти решения обнаруживают член также в производных классах, которые могут не объявлять сам член.
Например, следующее не компилируется.
#include <experimental/type_traits>
struct base
{
using type = std::true_type;
};
struct derived : public base { };
template<typename T>
using has_type_t = typename T::type;
template<typename T>
constexpr inline bool has_type_v =
std::experimental::is_detected<has_type_t, T>::value;
int main ()
{
static_assert (has_type_v<base>);
static_assert (!has_type_v<derived>);
}
Могут ли быть сделаны какие-либо изменения, чтобы выполнялись два утверждения? Или это необходимо для размышления?