Closed smarsching closed 2 years ago
We should use int32_t
, uint64_t
etc. always when specifying the UserType
template argument of the DeviceAccess accessors and in related places. The use of int
is at least sloppy, the use of long
and size_t
etc. is certainly wrong, for the exact reasons you are quoting.
The very long error message probably also points to some missing static_assert
somewhere (potentially DeviceAccess? Maybe can you send me the error message somehow to confirm?), which could give a clearer error message if wrong types are used...
So in short, yes I agree.
Thanks for your feedback. I created PR #58 to address this problem. Maybe you could be so kind and review it.
Here is the full error message. I only changed one use of int64_t
to long
in order to keept it as short as possible, but it is still quite long. At least some of the length can probably be explained by the use of Boost Fusion.
Building CXX object CMakeFiles/testUnifiedTypeChangingDecorator.dir/tests/src/testUnifiedTypeChangingDecorator.cpp.o
In file included from /Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:4:
In file included from /usr/local/include/boost/test/included/unit_test.hpp:18:
In file included from /usr/local/include/boost/test/impl/compiler_log_formatter.ipp:22:
In file included from /usr/local/include/boost/test/execution_monitor.hpp:28:
In file included from /usr/local/include/boost/function/function0.hpp:11:
In file included from /usr/local/include/boost/function/detail/maybe_include.hpp:15:
In file included from /usr/local/include/boost/function/function_template.hpp:13:
In file included from /usr/local/include/boost/function/detail/prologue.hpp:17:
In file included from /usr/local/include/boost/function/function_base.hpp:21:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
In file included from /usr/local/include/boost/container_hash/hash.hpp:22:
In file included from /usr/local/include/boost/container_hash/detail/hash_float.hpp:16:
/usr/local/include/boost/core/enable_if.hpp:68:25: error: no type named 'type'
in
'boost::fusion::result_of::at_key<boost::fusion::map<boost::fusion::pair<signed
char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >, long>'
typedef typename T::type type;
~~~~~~~~~~~~^~~~
/usr/local/include/boost/core/enable_if.hpp:75:35: note: in instantiation of
template class 'boost::lazy_disable_if_c<false,
boost::fusion::result_of::at_key<boost::fusion::map<boost::fusion::pair<signed
char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >, long> >' requested here
struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
^
/usr/local/include/boost/fusion/sequence/intrinsic/at_key.hpp:98:9: note: in
instantiation of template class
'boost::lazy_disable_if<boost::is_const<boost::fusion::map<boost::fusion::pair<signed
char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> > >,
boost::fusion::result_of::at_key<boost::fusion::map<boost::fusion::pair<signed
char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >, long> >' requested here
lazy_disable_if<
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/DeviceBackend.h:99:12: note:
while substituting deduced template arguments into function template
'at_key' [with Key = long, Sequence =
boost::fusion::map<boost::fusion::pair<signed char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >]
return CALL_VIRTUAL_FUNCTION_TEMPLATE(
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/VirtualFunctionTemplate.h:73:3: note:
expanded from macro 'CALL_VIRTUAL_FUNCTION_TEMPLATE'
boost::fusion::at_key<templateArgument>(functionName##_vtable.table)(_...
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/Device.h:286:66: note: in
instantiation of function template specialization
'ChimeraTK::DeviceBackend::getRegisterAccessor<long>' requested here
return TwoDRegisterAccessor<UserType>(_deviceBackendPointer->getRegi...
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:981:20: note:
in instantiation of function template specialization
'ChimeraTK::Device::getTwoDRegisterAccessor<long>' requested here
auto reg = d.getTwoDRegisterAccessor<UserType>(registerName);
^
/usr/local/include/boost/mpl/for_each.hpp:105:11: note: in instantiation of
function template specialization
'boost::mpl::aux::for_each_impl<false>::execute<boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 12>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
::execute(static_cast<first*>(0), static_cast<last*>(0), static_...
^
/usr/local/include/boost/mpl/for_each.hpp:118:15: note: in instantiation of
function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
boost::mpl::for_each<Sequence, identity<> >(f);
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:17: note:
in instantiation of function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
boost::mpl::for_each<VECTOR_OF_REGISTERS_T>([&](auto x) {
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:905:5: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>
>::test_B_3_1_2_1' requested here
test_B_3_1_2_1();
^
/Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:237:8: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0> >::runTests'
requested here
.runTests(cdd);
^
In file included from /Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:8:
In file included from /Users/termi/Applications/ChimeraTK/include/ChimeraTK/Device.h:6:
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/DeviceBackend.h:99:12: error:
no matching function for call to 'at_key'
return CALL_VIRTUAL_FUNCTION_TEMPLATE(
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/VirtualFunctionTemplate.h:73:3: note:
expanded from macro 'CALL_VIRTUAL_FUNCTION_TEMPLATE'
boost::fusion::at_key<templateArgument>(functionName##_vtable.table)(_...
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/Device.h:286:66: note: in
instantiation of function template specialization
'ChimeraTK::DeviceBackend::getRegisterAccessor<long>' requested here
return TwoDRegisterAccessor<UserType>(_deviceBackendPointer->getRegi...
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:981:20: note:
in instantiation of function template specialization
'ChimeraTK::Device::getTwoDRegisterAccessor<long>' requested here
auto reg = d.getTwoDRegisterAccessor<UserType>(registerName);
^
/usr/local/include/boost/mpl/for_each.hpp:105:11: note: in instantiation of
function template specialization
'boost::mpl::aux::for_each_impl<false>::execute<boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 12>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
::execute(static_cast<first*>(0), static_cast<last*>(0), static_...
^
/usr/local/include/boost/mpl/for_each.hpp:118:15: note: in instantiation of
function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
boost::mpl::for_each<Sequence, identity<> >(f);
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:17: note:
in instantiation of function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:976:49)>'
requested here
boost::mpl::for_each<VECTOR_OF_REGISTERS_T>([&](auto x) {
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:905:5: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>
>::test_B_3_1_2_1' requested here
test_B_3_1_2_1();
^
/Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:237:8: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0> >::runTests'
requested here
.runTests(cdd);
^
/usr/local/include/boost/fusion/sequence/intrinsic/at_key.hpp:102:5: note:
candidate template ignored: substitution failure [with Key = long,
Sequence = boost::fusion::map<boost::fusion::pair<signed char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >]
at_key(Sequence& seq)
^
/usr/local/include/boost/fusion/sequence/intrinsic/at_key.hpp:110:5: note:
candidate template ignored: substitution failure [with Key = long,
Sequence = boost::fusion::map<boost::fusion::pair<signed char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >]: no type named 'type' in 'boost::fusion::result_of::at_key<const
boost::fusion::map<boost::fusion::pair<signed char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<signed
char> >, boost::fusion::pair<unsigned char,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
char> >, boost::fusion::pair<short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<short>
>, boost::fusion::pair<unsigned short,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
short> >, boost::fusion::pair<int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<int>
>, boost::fusion::pair<unsigned int,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
int> >, boost::fusion::pair<long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<long
long> >, boost::fusion::pair<unsigned long long,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<unsigned
long long> >, boost::fusion::pair<float,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<float>
>, boost::fusion::pair<double,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<double>
>, boost::fusion::pair<std::__1::basic_string<char>,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<std::__1::basic_string<char>
> >, boost::fusion::pair<ChimeraTK::Boolean,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Boolean>
>, boost::fusion::pair<ChimeraTK::Void,
ChimeraTK::DeviceBackend::getRegisterAccessor_impl_functionSignature<ChimeraTK::Void>
> >, long>'
at_key(Sequence const& seq)
^
In file included from /Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:8:
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/Device.h:267:32: error:
no matching member function for call to 'getRegisterAccessor'
_deviceBackendPointer->getRegisterAccessor<UserType>(registerPat...
~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:3486:25: note:
in instantiation of function template specialization
'ChimeraTK::Device::getScalarRegisterAccessor<long>' requested here
auto accessor = d.getScalarRegisterAccessor<UserType>(registerName);
^
/usr/local/include/boost/mpl/for_each.hpp:105:11: note: in instantiation of
function template specialization
'boost::mpl::aux::for_each_impl<false>::execute<boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::v_iter<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 12>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:3466:49)>'
requested here
::execute(static_cast<first*>(0), static_cast<last*>(0), static_...
^
/usr/local/include/boost/mpl/for_each.hpp:118:15: note: in instantiation of
function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>,
boost::mpl::identity<mpl_::na>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:3466:49)>'
requested here
boost::mpl::for_each<Sequence, identity<> >(f);
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:3466:17: note:
in instantiation of function template specialization
'boost::mpl::for_each<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, (lambda at
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:3466:49)>'
requested here
boost::mpl::for_each<VECTOR_OF_REGISTERS_T>([&](auto x) {
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/UnifiedBackendTest.h:943:5: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>
>::test_NOSPEC_catalogueReadWrite' requested here
test_NOSPEC_catalogueReadWrite();
^
/Users/termi/Documents/ChimeraTK/ControlSystemAdapter/tests/src/testUnifiedTypeChangingDecorator.cpp:237:8: note:
in instantiation of member function
'ChimeraTK::UnifiedBackendTest<boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<float>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRangeChecked<int>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsyncRo<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCastedAsync<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterRoCasted<long
long>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<double>,
boost::mpl::v_item<TypeChangingDecoratorUnifiedTest::TestRegisterCasted<long>,
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0>, 0> >::runTests'
requested here
.runTests(cdd);
^
/Users/termi/Applications/ChimeraTK/include/ChimeraTK/DeviceBackend.h:97:66: note:
candidate template ignored: substitution failure [with UserType = long]
boost::shared_ptr<NDRegisterAccessor<UserType>> DeviceBackend::getRegi...
^
3 errors generated.
When compiling the control-system adapter with Clang 12.0 (on macOS 12.6, x86_64) there is a problem when compiling
testUnifiedTypeChangingDecorator.cpp
. The error message is very, very long, so I am not reproducing it here, but the problem seems to boil down to the fact that inBOOST_AUTO_TEST_CASE(testRegisterAccessor)
, we instantiate sub-classes ofTestRegister
specifying the typelong
as the template parameter.When replacing
long
withint32_t
orint64_t
, the code compiles without any issues, so I think that this is caused by the fact that inSupportedUserTypes.h
(from DeviceAccess),int32_t
andint64_t
are listed butlong
is not. Interestingly,int
is listed neither, but can be used.I suspect that Clang (at least the version of Clang provided for macOS 12), does not assume that
long == int64_t
for the purpose of overload / template resolution. I think that this might be related to the problem withsize_t
anduint64_t
that we saw in DeviceAccess (see https://github.com/ChimeraTK/DeviceAccess/issues/281).I didn’t find anything about this in the Clang documentation, but I found a discussion about the same problem from a few years ago: https://comp.lang.cpp.narkive.com/kH1S9MDr/int32-t-vs-int64-t-vs-long-ambiguous
The behavior of Clang actually makes sense, because the nasty thing about
long
is that it might be 32 or 64 bit depending on the platform (see https://en.cppreference.com/w/cpp/language/types), so overload / template resolution would depend on the platform, which could result in some very hard to find problems.In general, mixing the fixed-size integer types with the platform-dependent types is a bad idea, so I think we should replace
int
andlong
intestUnifiedTypeChangingDecorator.cpp
withint32_t
andint64_t
respectively. Usingint
is not quite as problematic aslong
becausesizeof(int) == 4
seems to be true on most platforms (Win16 being one notable exception, but I don’t think that Clang even supports this platform), but using this in this context still is not entriely clean, so I would like to avoid it.Are there any objections?