是否可以确定在编译时是否将final
标记为template<typename T>
struct sub {
using type = struct : T {};
};
template<typename T>
struct is_final {
using yes = char;
using no = struct { char arr[2]; };
template<typename U> static yes test(...);
template<typename U> static no test(typename sub<U>::type*);
public:
static constexpr bool value = sizeof (test<T>(nullptr)) == sizeof (yes);
};
?我一直试图修改this answer的方法:
is_final<T>::value
但它不起作用; false
始终为std::is_final
。似乎SFINAE不会那样工作。
如果在C ++ 11中无法实现这个特性,那么它是如何在C ++ 14(persons.put(TAG_STATE, state);
if (!personList.contains(persons)) {
// take this to top and then check
//persons.put(TAG_STATE, state);
personList.add(persons);
}
)中完成的?是否有一些新的语言功能可以实现这个功能?