#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);
}
コンパイルは上記の次のエラーを生成します。<bool> :: referenceが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&)
私はこのように、G ++(バージョン4.6.1)を使用してコンパイル:これはなぜ起こるか疑問がある
g++ -O3 -std=c++0x -Wall -Wextra -pedantic dk2.cpp
? vector<bool>::reference
はbool&
ではありませんか?それともコンパイラのバグですか?
または、私は何か愚かな試みですか? :)
残念ながら、その名前にもかかわらず、 'std :: vector'は 'bool'の' vector'ではありません。 –
回避策として、 'std :: unique_ptr(new bool [3])' ... –
Herb Sutterの[コンテナはコンテナではありませんか?](http://www.gotw.ca/publications /mill09.htm)はちょうどこの問題です。 – legends2k