我有一个功能模板
template <typename T1, typename T2, typename IT1, typename IT2>
MethodResult<T1, T2>& method (IT1 it1begin, IT1 it1end, IT2 it2begin, IT2 it2end);
使用以下继承方案
class A
class B : A
class C : A
我希望该功能得以执行
IT1
和IT2
是迭代器,分别取消引用T1
和T2
。
为此,我尝试了
static_assert(std::is_base_of< A,
typename list<T1>::iterator::value_type >::value,
"wrong type");
编译很好,但是当我调用
时它没有强制执行任何操作method<B, C>("not an", "iterator", 3, 2);
编译器不会产生错误。
请注意我先试过
static_assert(std::is_base_of<A,
typename std::iterator_traits<T1>::value_type,
"wrong type");
在我阅读this question但编译器产生后。
wrong number of template arguments (3, should be 2)
有关如何实现此类型检查的想法吗?
答案 0 :(得分:4)
这个问题含糊不清,有一些问题。但我想我得到了它的要点。您正在寻找的static_assert
;
static_assert(std::is_base_of<A,
typename std::iterator_traits<IT1>::value_type>::value,
"wrong type");
您错过了一些括号和value
等。我的格式与原始帖子类似。