Пытаюсь написать класс, реализующий одновременно константный и неконстантый итератор как показано здесь.
Проблема возникает при компиляции следующего участка кода(упрощено):
class SimpleIt {
using my_vector_ref_type = named_vector<T>&;
public:
SimpleIt(my_vector_ref_type r) {}
};
//То же самое, но с std::conditional
template <bool is_const>
class CondIt {
using my_vector_ref_type = std::conditional<
is_const,
const named_vector<T>&,
named_vector<T>&
>;
public:
CondIt(my_vector_ref_type r) {}
};
iterator begin() {
SimpleIt si(*this); //Компилирует
CondIt<false> c(*this); //error: no matching constructor for initialization of 'CondIt<false>'
PS: http://tpcg.io/FBny1V
Во-первых нужен #include <type_traits>, во вторых нужно имя типа:
using my_vector_ref_type = typename ::std::conditional
<
is_const
, const named_vector<T>&
, named_vector<T>&
>::type;
А если используется с++14, то можно написать короче:
using my_vector_ref_type = ::std::conditional_t
<
is_const
, const named_vector<T>&
, named_vector<T>&
>;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости