fmi4cpp fails to compile with clang where as g++ let it pass
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_variables.cpp:10:18: error: defaulting this default constructor would delete it after its first declaration
model_variables::model_variables() = default;
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/model_variables.hpp:18:40: note: default constructor of 'model_variables' is implicitly deleted because field 'variables_' of const-qualified type 'const std::vector<scalar_variable>' would not be initialized
const std::vector<scalar_variable> variables_;
^
1 error generated.
here are the warnings with clang which are mainly due to overusing std::move (prevents from using copy ellision) but not only
I would suggest to include ubuntu-20.04 and more recent gcc compilers including clang
make
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmu_resource.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/fmu.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:6:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/me_fmu.hpp:29:34: warning: 'new_instance' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
std::unique_ptr<me_instance> new_instance(bool visible = false, bool loggingOn = false);
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_base.hpp:58:42: note: overridden virtual function is here
virtual std::unique_ptr<me_instance> new_instance(bool visible, bool loggingOn) = 0;
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:37:25: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
modelDescription_ = std::move(parse_model_description(resource_->model_description_path()));
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:37:25: note: remove std::move call here
modelDescription_ = std::move(parse_model_description(resource_->model_description_path()));
^~~~~~~~~~ ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:62:54: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
std::shared_ptr<const cs_model_description> cs = std::move(modelDescription_->as_cs_description());
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:62:54: note: remove std::move call here
std::shared_ptr<const cs_model_description> cs = std::move(modelDescription_->as_cs_description());
^~~~~~~~~~ ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:68:54: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
std::shared_ptr<const me_model_description> me = std::move(modelDescription_->as_me_description());
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:68:54: note: remove std::move call here
std::shared_ptr<const me_model_description> me = std::move(modelDescription_->as_me_description());
^~~~~~~~~~ ~
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_library.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmi2_library.hpp:7:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_resource.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fs_portability.hpp:6:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/filesystem:45:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/fs_path.h:37:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/locale:43:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/locale_conv.h:41:
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:85:2: warning: delete called on non-final 'fmi4cpp::fmi2::cs_fmu' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
delete __ptr;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of member function 'std::default_delete<fmi4cpp::fmi2::cs_fmu>::operator()' requested here
get_deleter()(std::move(__ptr));
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:63:12: note: in instantiation of member function 'std::unique_ptr<fmi4cpp::fmi2::cs_fmu, std::default_delete<fmi4cpp::fmi2::cs_fmu> >::~unique_ptr' requested here
return std::make_unique<cs_fmu>(resource_, cs);
^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_library.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmi2_library.hpp:7:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_resource.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fs_portability.hpp:6:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/filesystem:45:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/fs_path.h:37:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/locale:43:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/locale_conv.h:41:
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:85:2: warning: delete called on non-final 'fmi4cpp::fmi2::me_fmu' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
delete __ptr;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of member function 'std::default_delete<fmi4cpp::fmi2::me_fmu>::operator()' requested here
get_deleter()(std::move(__ptr));
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:69:12: note: in instantiation of member function 'std::unique_ptr<fmi4cpp::fmi2::me_fmu, std::default_delete<fmi4cpp::fmi2::me_fmu> >::~unique_ptr' requested here
return std::make_unique<me_fmu>(resource_, me);
^
6 warnings generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/fmi2_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_fmu.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_fmu.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/me_fmu.cpp:2:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/me_fmu.hpp:29:34: warning: 'new_instance' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
std::unique_ptr<me_instance> new_instance(bool visible = false, bool loggingOn = false);
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_base.hpp:58:42: note: overridden virtual function is here
virtual std::unique_ptr<me_instance> new_instance(bool visible, bool loggingOn) = 0;
^
1 warning generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_slave.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_instance.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/enums.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_description.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_description_parser.cpp.o
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:288:36: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
base.model_variables = std::move(parse_model_variables(v.second));
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:288:36: note: remove std::move call here
base.model_variables = std::move(parse_model_variables(v.second));
^~~~~~~~~~ ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:290:36: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
base.model_structure = std::move(parse_model_structure(v.second));
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:290:36: note: remove std::move call here
base.model_structure = std::move(parse_model_structure(v.second));
^~~~~~~~~~ ~
2 warnings generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_variables.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/scalar_variable.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
: variable_(std::move(variable))
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:90:11: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<int, fmi4cpp::fmi2::integer_attribute>::typed_scalar_variable' requested here
: typed_scalar_variable<T, U>(variable, attribute)
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:115:7: note: in instantiation of member function 'fmi4cpp::fmi2::bounded_scalar_variable<int, fmi4cpp::fmi2::integer_attribute>::bounded_scalar_variable' requested here
: bounded_scalar_variable(variable, attribute)
^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
: variable_(std::move(variable))
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:90:11: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<double, fmi4cpp::fmi2::real_attribute>::typed_scalar_variable' requested here
: typed_scalar_variable<T, U>(variable, attribute)
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:122:7: note: in instantiation of member function 'fmi4cpp::fmi2::bounded_scalar_variable<double, fmi4cpp::fmi2::real_attribute>::bounded_scalar_variable' requested here
: bounded_scalar_variable(variable, attribute)
^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
: variable_(std::move(variable))
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:164:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<std::__cxx11::basic_string<char>, fmi4cpp::fmi2::string_attribute>::typed_scalar_variable' requested here
: typed_scalar_variable(variable, attribute)
^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
: variable_(std::move(variable))
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:171:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<bool, fmi4cpp::fmi2::boolean_attribute>::typed_scalar_variable' requested here
: typed_scalar_variable(variable, attribute)
^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
: variable_(std::move(variable))
^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:178:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<int, fmi4cpp::fmi2::enumeration_attribute>::typed_scalar_variable' requested here
: typed_scalar_variable(variable, attribute)
^
5 warnings generated.
fmi4cpp fails to compile with clang where as g++ let it pass
here are the warnings with clang which are mainly due to overusing std::move (prevents from using copy ellision) but not only I would suggest to include ubuntu-20.04 and more recent gcc compilers including clang