You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi. New code was added in 20.39 that doesn't build, as opposed to 20.37. I discovered this as I was updating the Debian package. It produces errors like this:
$ g++ \
-DETL_DEBUG \
-I../../test/../include \
-isystem ../../test/UnitTest++/.. \
-Wno-aggressive-loop-optimizations \
-Wno-pessimizing-move \
-std=gnu++20 \
-fno-omit-frame-pointer \
-fno-common \
-Wall \
-Wextra \
-Werror \
-Wfloat-equal \
-Wuseless-cast \
-Wshadow \
-Wnull-dereference \
-o /tmp/tst.o \
-c ../../test/test_observer.cpp
In file included from ../../test/../include/etl/algorithm.h:42,
from ../../test/../include/etl/observer.h:54,
from ../../test/test_observer.cpp:31:
../../test/../include/etl/type_traits.h: In instantiation of ‘struct etl::has_duplicates<const {anonymous}::Notification3&>’:
../../test/../include/etl/type_traits.h:2310:10: required from ‘struct etl::has_duplicates<{anonymous}::Notification2&, const {anonymous}::Notification3&>’
2310 | struct has_duplicates<TFirst, TRest...> : etl::conditional_t<etl::is_one_of<TFirst, TRest...>::value,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../test/../include/etl/observer.h:308:5: required from ‘class etl::observer<{anonymous}::Notification2&, const {anonymous}::Notification3&>’
308 | ETL_STATIC_ASSERT((!etl::has_duplicates<T1, TRest...>::value), "Observer has duplicate notification types");
| ^~~~~
../../test/../include/etl/observer.h:304:9: required from ‘class etl::observer<{anonymous}::Notification1, {anonymous}::Notification2&, const {anonymous}::Notification3&>’
304 | class observer<T1, TRest...> : public observer<T1>, public observer<TRest...>
| ^~~~~~~~~~~~~~~~~~~~~~
../../test/test_observer.cpp:147:26: required from here
147 | class Observer1 : public ObserverType
| ^~~~~~~~~~~~
../../test/../include/etl/type_traits.h:2310:98: error: wrong number of template arguments (1, should be at least 2)
2310 | struct has_duplicates<TFirst, TRest...> : etl::conditional_t<etl::is_one_of<TFirst, TRest...>::value,
| ^~~~~
../../test/../include/etl/type_traits.h:1355:10: note: provided for ‘template<class T, class T1, class ... TRest> struct etl::is_one_of’
1355 | struct is_one_of
| ^~~~~~~~~
In file included from ../../test/../include/etl/type_traits.h:58:
../../test/../include/etl/observer.h: In instantiation of ‘class etl::observer<{anonymous}::Notification2&, const {anonymous}::Notification3&>’:
../../test/../include/etl/observer.h:304:9: required from ‘class etl::observer<{anonymous}::Notification1, {anonymous}::Notification2&, const {anonymous}::Notification3&>’
304 | class observer<T1, TRest...> : public observer<T1>, public observer<TRest...>
| ^~~~~~~~~~~~~~~~~~~~~~
../../test/test_observer.cpp:147:26: required from here
147 | class Observer1 : public ObserverType
| ^~~~~~~~~~~~
../../test/../include/etl/observer.h:308:60: error: ‘value’ is not a member of ‘etl::has_duplicates<{anonymous}::Notification2&, const {anonymous}::Notification3&>’
308 | ETL_STATIC_ASSERT((!etl::has_duplicates<T1, TRest...>::value), "Observer has duplicate notification types");
| ^~~~~
../../test/../include/etl/static_assert.h:35:63: note: in definition of macro ‘ETL_STATIC_ASSERT’
35 | #define ETL_STATIC_ASSERT(Condition, Message) static_assert(Condition, Message)
| ^~~~~~~~~
../../test/../include/etl/observer.h: In instantiation of ‘class etl::observer<{anonymous}::Notification1, {anonymous}::Notification2&, const {anonymous}::Notification3&>’:
../../test/test_observer.cpp:147:26: required from here
147 | class Observer1 : public ObserverType
| ^~~~~~~~~~~~
../../test/../include/etl/observer.h:308:60: error: ‘value’ is not a member of ‘etl::has_duplicates<{anonymous}::Notification1, {anonymous}::Notification2&, const {anonymous}::Notification3&>’
308 | ETL_STATIC_ASSERT((!etl::has_duplicates<T1, TRest...>::value), "Observer has duplicate notification types");
| ^~~~~
../../test/../include/etl/static_assert.h:35:63: note: in definition of macro ‘ETL_STATIC_ASSERT’
35 | #define ETL_STATIC_ASSERT(Condition, Message) static_assert(Condition, Message)
| ^~~~~~~~~
../../test/../include/etl/type_traits.h: In instantiation of ‘struct etl::has_duplicates<int>’:
../../test/../include/etl/type_traits.h:2310:10: required from ‘struct etl::has_duplicates<void, int>’
2310 | struct has_duplicates<TFirst, TRest...> : etl::conditional_t<etl::is_one_of<TFirst, TRest...>::value,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../test/../include/etl/observer.h:308:5: required from ‘class etl::observer<void, int>’
308 | ETL_STATIC_ASSERT((!etl::has_duplicates<T1, TRest...>::value), "Observer has duplicate notification types");
| ^~~~~
../../test/test_observer.cpp:237:32: required from here
237 | class ObserverVoidInt : public ObserverVoidIntType
| ^~~~~~~~~~~~~~~~~~~
../../test/../include/etl/type_traits.h:2310:98: error: wrong number of template arguments (1, should be at least 2)
2310 | struct has_duplicates<TFirst, TRest...> : etl::conditional_t<etl::is_one_of<TFirst, TRest...>::value,
| ^~~~~
../../test/../include/etl/type_traits.h:1355:10: note: provided for ‘template<class T, class T1, class ... TRest> struct etl::is_one_of’
1355 | struct is_one_of
| ^~~~~~~~~
../../test/../include/etl/observer.h: In instantiation of ‘class etl::observer<void, int>’:
../../test/test_observer.cpp:237:32: required from here
237 | class ObserverVoidInt : public ObserverVoidIntType
| ^~~~~~~~~~~~~~~~~~~
../../test/../include/etl/observer.h:308:60: error: ‘value’ is not a member of ‘etl::has_duplicates<void, int>’
308 | ETL_STATIC_ASSERT((!etl::has_duplicates<T1, TRest...>::value), "Observer has duplicate notification types");
| ^~~~~
../../test/../include/etl/static_assert.h:35:63: note: in definition of macro ‘ETL_STATIC_ASSERT’
35 | #define ETL_STATIC_ASSERT(Condition, Message) static_assert(Condition, Message)
| ^~~~~~~~~
has_duplicates() is intended to take any number of templated types, and recursively wittles them down one by one. The problem is that the CPP11 path has matching calls for 0 arguments and >=2 arguments, but not for ` argument. A patch to add that path:
Hi. New code was added in 20.39 that doesn't build, as opposed to 20.37. I discovered this as I was updating the Debian package. It produces errors like this:
has_duplicates()
is intended to take any number of templated types, and recursively wittles them down one by one. The problem is that the CPP11 path has matching calls for 0 arguments and >=2 arguments, but not for ` argument. A patch to add that path:I'm building the new Debian package with this patch. Thanks.
The text was updated successfully, but these errors were encountered: