このイテレータの値を比較する2つのイテレータとカスタムコンパレータを必要とする関数が必要です。私はこれのために追加のテンプレート引数を使いたくない。このコードは、打ち鳴らすことにより、正常にコンパイルされていますが、GCC 5.4.0で、私はいくつかのエラーを持っているコンパレータを別のテンプレート関数に適切に渡す方法
template<typename T>
void foo(T begin, T end,
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
{
// I want to use 'compare' as: "compare(*begin, *begin);"
}
:
binary_heap.cpp:10:79: error: local variable 'begin' may not appear in this context
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
^
binary_heap.cpp:10:85: error: template argument 1 is invalid
function<bool(decltype(*begin), decltype(*begin))> compare = less<decltype(*begin)>())
このコードを修正するためにどのように私はこの方法でそれを実装しましたそれはclangとGCCの両方でうまくコンパイルできますか?または、そのような関数を定義するためのより適切なソリューションがありますか?
なぜ、このために追加のテンプレート引数を使用したくないのですか? – Yakk