When I compile the unit tests with GCC, all test files compile successfully. When I compile with Clang (currently using OS X Clang), the following files fail to compile with a consistent error pattern:
'test/test_deque.cpp',
'test/test_flat_map.cpp',
'test/test_flat_multimap.cpp',
'test/test_flat_multiset.cpp',
'test/test_flat_set.cpp',
'test/test_map.cpp',
'test/test_multimap.cpp',
'test/test_multiset.cpp',
'test/test_reference_flat_map.cpp',
'test/test_reference_flat_multimap.cpp',
'test/test_reference_flat_multiset.cpp',
'test/test_reference_flat_set.cpp',
'test/test_pearson.cpp',
'test/test_set.cpp',
'test/test_string_view.cpp',
'test/test_to_u16string.cpp',
'test/test_to_u32string.cpp',
'test/test_to_string.cpp',
'test/test_to_wstring.cpp',
'test/test_unordered_map.cpp',
'test/test_unordered_multimap.cpp',
'test/test_unordered_multiset.cpp',
'test/test_unordered_set.cpp',
This is the primary error pattern:
In file included from ../test/test_flat_multimap.cpp:29:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/UnitTest++.h:1:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/UnitTestPP.h:6:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:6:
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/Checks.h:24:32: error: invalid operands to binary expression ('basic_ostream<char, std::__1::char_traits<char> >' and 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator')
stream << "Expected " << expected << " but was " << actual;
~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~
../test/test_flat_multimap.cpp:437:7: note: in instantiation of function template specialization 'UnitTest::CheckEqual<etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator, etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator>' requested here
CHECK_EQUAL(constData.begin(), std::begin(constData));
^
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:151:27: note: expanded from macro 'CHECK_EQUAL'
#define CHECK_EQUAL UNITTEST_CHECK_EQUAL
^
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:40:17: note: expanded from macro 'UNITTEST_CHECK_EQUAL'
UnitTest::CheckEqual(*UnitTest::CurrentTest::Results(), expected, actual, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:218:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const void *' for 1st argument; take the address of the argument with &
basic_ostream& operator<<(const void* __p);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/type_traits:4830:3: note: candidate function template not viable: no known conversion from 'basic_ostream<char, std::__1::char_traits<char> >' to 'std::byte' for 1st argument
operator<< (byte __lhs, _Integer __shift) noexcept
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:194:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'std::__1::basic_ostream<char> &(*)(std::__1::basic_ostream<char> &)' for 1st argument
basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:198:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'basic_ios<std::__1::basic_ostream<char, std::__1::char_traits<char> >::char_type, std::__1::basic_ostream<char, std::__1::char_traits<char> >::traits_type> &(*)(basic_ios<std::__1::basic_ostream<char, std::__1::char_traits<char> >::char_type, std::__1::basic_ostream<char, std::__1::char_traits<char> >::traits_type> &)' (aka 'basic_ios<char, std::__1::char_traits<char> > &(*)(basic_ios<char, std::__1::char_traits<char> > &)') for 1st argument
basic_ostream& operator<<(basic_ios<char_type, traits_type>&
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:203:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'std::__1::ios_base &(*)(std::__1::ios_base &)' for 1st argument
basic_ostream& operator<<(ios_base& (*__pf)(ios_base&))
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:206:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'bool' for 1st argument
basic_ostream& operator<<(bool __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:207:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'short' for 1st argument
basic_ostream& operator<<(short __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:208:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'unsigned short' for 1st argument
basic_ostream& operator<<(unsigned short __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:209:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'int' for 1st argument
basic_ostream& operator<<(int __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:210:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'unsigned int' for 1st argument
basic_ostream& operator<<(unsigned int __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:211:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'long' for 1st argument
basic_ostream& operator<<(long __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:212:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'unsigned long' for 1st argument
basic_ostream& operator<<(unsigned long __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:213:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'long long' for 1st argument
basic_ostream& operator<<(long long __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:214:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'unsigned long long' for 1st argument
basic_ostream& operator<<(unsigned long long __n);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:215:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'float' for 1st argument
basic_ostream& operator<<(float __f);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:216:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'double' for 1st argument
basic_ostream& operator<<(double __f);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:217:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'long double' for 1st argument
basic_ostream& operator<<(long double __f);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:219:20: note: candidate function not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'basic_streambuf<std::__1::basic_ostream<char, std::__1::char_traits<char> >::char_type, std::__1::basic_ostream<char, std::__1::char_traits<char> >::traits_type> *' (aka 'basic_streambuf<char, std::__1::char_traits<char> > *') for 1st argument
basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:755:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'char' for 2nd argument
operator<<(basic_ostream<_CharT, _Traits>& __os, char __cn)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:788:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'char' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, char __c)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:795:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'signed char' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, signed char __c)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:802:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'unsigned char' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, unsigned char __c)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:816:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const char *' for 2nd argument
operator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:862:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const char *' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, const char* __str)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:869:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const signed char *' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, const signed char* __str)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:877:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const unsigned char *' for 2nd argument
operator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1061:1: note: candidate function template not viable: no known conversion from 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator' to 'const std::__1::error_code' for 2nd argument
operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:748:1: note: candidate template ignored: deduced conflicting types for parameter '_CharT' ('char' vs. 'etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator')
operator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:809:1: note: candidate template ignored: could not match 'const _CharT *' against 'etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1044:1: note: candidate template ignored: could not match 'basic_string<type-parameter-0-0, type-parameter-0-1, type-parameter-0-2>' against 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os,
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1069:1: note: candidate template ignored: could not match 'shared_ptr<type-parameter-0-2>' against 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1088:1: note: candidate template ignored: could not match 'bitset<_Size>' against 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1034:1: note: candidate template ignored: requirement '!is_lvalue_reference<basic_ostream<char> &>::value' was not satisfied [with _Stream = std::__1::basic_ostream<char> &, _Tp = etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator]
operator<<(_Stream&& __os, const _Tp& __x)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1052:1: note: candidate template ignored: could not match 'basic_string_view<type-parameter-0-0, type-parameter-0-1>' against 'etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os,
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/ostream:1081:1: note: candidate template ignored: could not match 'unique_ptr<type-parameter-0-2, type-parameter-0-3>' against 'const etl::ireference_flat_multimap<int, TestDataNDC<std::__1::basic_string<char> >, etl::less<int> >::const_iterator'
operator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p)
^
4 warnings and 2 errors generated.
[104/125] Compiling C++ object 'etl_un..._vector_pointer_external_buffer.cpp.o'
A secondary pattern that occurs is:
In file included from ../test/test_string_view.cpp:29:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/UnitTest++.h:1:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/UnitTestPP.h:6:
In file included from /usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:6:
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/Checks.h:24:32: error: call to function 'operator<<' that is neither visible in the template definition nor found by argument-dependent lookup
stream << "Expected " << expected << " but was " << actual;
^
../test/test_string_view.cpp:386:7: note: in instantiation of function template specialization 'UnitTest::CheckEqual<etl::basic_string_view<char, etl::char_traits<char> >, etl::basic_string_view<char, etl::char_traits<char> > >' requested here
CHECK_EQUAL(view1, sub);
^
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:151:27: note: expanded from macro 'CHECK_EQUAL'
#define CHECK_EQUAL UNITTEST_CHECK_EQUAL
^
/usr/local/Cellar/unittest-cpp/2.0.0/include/UnitTest++/CheckMacros.h:40:17: note: expanded from macro 'UNITTEST_CHECK_EQUAL'
UnitTest::CheckEqual(*UnitTest::CurrentTest::Results(), expected, actual, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
^
../test/test_string_view.cpp:57:17: note: 'operator<<' should be declared prior to the call site or in namespace 'etl'
std::ostream& operator << (std::ostream& os, const View& view)
^
1 error generated.
bug