[cfe-dev] [libc++] std::count with bool types

Michael Sommerville msommerville at gmail.com
Thu May 10 06:41:44 PDT 2012


I am trying out a recent clang 3.1 release candidate on Linux with and
ToT libc++ and have run into the following compilation error. This
test builds successfully using libstdc++:

$ clang -v
clang version 3.1 (branches/release_31 155817)
Target: x86_64-unknown-linux-gnu
Thread model: posix
.
$ cat test_count.cxx
#include <iostream>
#include <algorithm>
#include <vector>

int main ()
{
    // counting boolean elements in array
    bool bool_array[] = { true,false,true,false,true,false,true,true};
    int mycount = (int) std::count (bool_array, bool_array+8, true);
    std::cout << "true appears " << mycount  << " times.\n";

    // counting boolean elements in container
    std::vector<bool> bool_vector( bool_array,bool_array+8 );
    mycount = (int) std::count (bool_vector.begin(), bool_vector.end(), false);
    std::cout << "false appears " << mycount  << " times.\n";
}

$ clang++ -stdlib=libc++ test_count.cxx -o testit
In file included from test_count.cxx:1:
In file included from /usr/include/c++/v1/iostream:40:
In file included from /usr/include/c++/v1/istream:156:
In file included from /usr/include/c++/v1/ostream:134:
In file included from /usr/include/c++/v1/bitset:120:
/usr/include/c++/v1/__bit_reference:236:27: error: '__storage_type' is
a private member of
      'std::__1::__bit_iterator<std::__1::vector<bool,
std::__1::allocator<bool> >, false, 0>'
    typedef typename _It::__storage_type __storage_type;
                          ^
/usr/include/c++/v1/__bit_reference:299:16: note: in instantiation of
function template specialization
      'std::__1::__count_bool_true<std::__1::vector<bool,
std::__1::allocator<bool> > >' requested here
        return __count_bool_true(__first, static_cast<typename
_Cp::size_type>(__last - __first));
               ^
test_count.cxx:14:21: note: in instantiation of function template
specialization 'std::__1::count<std::__1::vector<bool,
      std::__1::allocator<bool> >, bool>' requested here
    mycount = (int) std::count (bool_vector.begin(), bool_vector.end(), false);
                    ^
/usr/include/c++/v1/__bit_reference:1071:84: note: declared private here
    typedef typename _Cp::__storage_type
            __storage_type;

            ^
/usr/include/c++/v1/__bit_reference:238:50: error: '__bits_per_word'
is a private member of
      'std::__1::__bit_iterator<std::__1::vector<bool,
std::__1::allocator<bool> >, false, 0>'
    static const unsigned __bits_per_word = _It::__bits_per_word;
                                                 ^
/usr/include/c++/v1/__bit_reference:1074:27: note: declared private here
    static const unsigned __bits_per_word = _Cp::__bits_per_word;

etc etc

-Michael



More information about the cfe-dev mailing list