【发布时间】:2016-05-04 12:22:45
【问题描述】:
我的问题一般是关于标准库中的 enable_if 谓词,但我将在迭代器类型的上下文中对其进行构建,因为这是我目前遇到此问题的地方。
我有一个自定义迭代器类型It,这样std::iterator_traits<It>::value_type 就是Val。我已经成功地将这种类型与 C++11 之前的标准一起使用,但现在使用 C++11(以及另一个通常更严格的编译器)编译失败了。我的用例之一是insert into a vector 喜欢
std::vector<Val> v;
It begin = ...
It end = ...
v.insert(v.end(), begin, end);
编译器拒绝我想要的特定重载候选 insert<_Iter>(iterator, _Iter, _Iter) 的原因是:
no matching member function for call to 'insert'
candidate template ignored: disabled by 'enable_if' [with _Iter = It]
查看<vector> 标头,我看到失败的enable_if 谓词是_Is_Iterator。有没有办法逐步检查谓词条件以找出哪个It 不满足,或者通常有任何方法可以找出此信息而无需手动检查InputIterator 的所有要求(或任何相关概念可能是)一个接一个?
旧编译器(It 适用)是来自 C++ Builder XE8 的 bcc32;新的编译器是 C++ Builder 10.1 中基于 Clang 的 32 位编译器。
【问题讨论】:
-
也许 templight 可以帮忙。
-
看起来不错。我试试看。
-
@alcedine 有了encppreference.com 这样的网站,很容易一一检查任何概念的要求。
-
@Holt 并不是很难,而是有很多东西需要检查。