#include <vector>
struct A
{
void foo(){}
};
template< typename T >
void callIfToggled(bool v1, bool &v2, T & t)
{
if (v1 != v2)
{
v2 = v1;
t.foo();
}
}
int main()
{
std::vector<bool> v= { false, true, false };
const bool f = false;
A a;
callIfToggled(f, v[0], a);
callIfToggled(f, v[1], a);
callIfToggled(f, v[2], a);
}
La compilación del ejemplo anterior produce el error siguiente:¿Por qué el vector <bool> :: reference no devuelve referencia a bool?
dk2.cpp: In function 'int main()':
dk2.cpp:29:28: error: no matching function for call to 'callIfToggled(const bool&, std::vector<bool>::reference, A&)'
dk2.cpp:29:28: note: candidate is:
dk2.cpp:13:6: note: template<class T> void callIfToggled(bool, bool&, T&)
He compilado usando g ++ (versión 4.6.1) así:
g++ -O3 -std=c++0x -Wall -Wextra -pedantic dk2.cpp
La cuestión es por qué sucede esto? ¿vector<bool>::reference
no es bool&
? ¿O es un error del compilador?
O, ¿estoy intentando algo estúpido? :)
Desafortunadamente, a pesar de su nombre, 'std :: vector' no es un 'vector' de' bool'. –
Como solución alternativa, se puede usar 'std :: unique_ptr (nueva bool [3])' ... –
de Herb Sutter [¿Cuándo un contenedor no un contenedor?] (Http://www.gotw.ca/publications /mill09.htm) es solo acerca de este problema. – legends2k