Вы нажимаете проклятие специализации поддельного контейнера.
Это подтвержденная ошибка дизайна, которую стандарт продолжает распространять, поэтому вам нужно специализировать свой шаблон, чтобы избежать стандартной специализации.
Используйте std::vector<mybool>
с struct mybool{bool value;};
или некоторые из них по вашей специализации (и проклинайте упрямый комитет за то, что он не ускоряет его и не отменяет их ошибку).
В качестве альтернативы просто верните std::vector<T>::reference
вместо T&
. (Воздерживаться, если это возможно, не размножайте эту бородавку) (Не забудьте проклятие)