関数には、整数のコンテナ型にのみ関数を制限するenable_if
ステートメントがあるにもかかわらず、両方の関数呼び出しで「非積分過負荷」が出力されます。何故ですか?解像度がオーバーロードされて最初の機能が選択されないのはなぜですか?
#include <iostream>
#include <vector>
#include <type_traits>
template<bool B, typename V = void>
using enable_if = typename std::enable_if<B, V>::type;
template<typename ForwardIt>
auto f(ForwardIt first, ForwardIt)
-> enable_if<std::is_integral<decltype(*first)>{}>
{
std::cout << "Integral container type" << std::endl;
}
template<typename ForwardIt>
void f(ForwardIt, ForwardIt)
{
std::cout << "Non-integral container type" << std::endl;
}
int main()
{
struct X { };
std::vector<int> iv;
std::vector<X> xv;
f(iv.begin(), iv.end()); // "Non-integral container type"
f(xv.begin(), xv.end()); // "Non-integral container type"
}
私も2番目のオーバーロードではなく、無駄にenable_if<!std::is_integral<...>>
を使用してみました。
+1。さて、C++ 03 + TR1、とにかく。 – Casey