Я пытаюсь написать функцию, которая позволяет применять различные объекты-накопители Boost к различным векторам разных типов.
Для некоторых типов объекты-аккумуляторы не имеют смысла. Например, большинство аккумуляторов не будет работать, если передан массив типов bool
.
Упрощенный код у меня выглядит так:
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/count.hpp>
using namespace boost::accumulators;
template<class V, class T> static void _apply(T* ptr, size_t n) {
accumulator_set<T, features<V> > acc;
std::for_each(ptr, ptr + n, std::ref(acc));
};
int main() {
bool v[] = { true, false, true };
_apply<tag::count, bool>(v, 3);
}
Я пытаюсь выяснить, как использовать SFINAE для предоставления сообщения об ошибке во время выполнения _apply
вызывается с типом, который не имеет смысла, а не с ошибкой компилятора.
error: no match for ‘operator+=’ (operand types are ‘const std::_Bit_reference’ and ‘const bool’)