You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@celix.apache.org by erjan altena <er...@gmail.com> on 2017/07/21 17:39:37 UTC

Celix not building with g++ 7.1.1

Hi,

I have updated my system to Fedora 26 which comes with g++ 7.1.1 Now
building Celix fails in the C++ DM.

dependency_manager_cxx/include/celix/dm/Component_Impl.h: In member
function ‘celix::dm::Component<T>&
celix::dm::Component<T>::remove(celix::dm::CServiceDependency<T, I>&)’:
/home/erjan/x/c/dependency_manager_cxx/include/celix/dm/Component_Impl.h:140:24:
error: ‘class std::vector<std::shared_ptr<celix::dm::BaseServiceDependency>
>’ has no member named ‘remove’; did you mean ‘resize’?
     this->dependencies.remove(dep);
                        ^~~~~~
                        resize
make[2]: ***
[dependency_manager_cxx/CMakeFiles/dependency_manager_cxx_static.dir/build.make:159:
dependency_manager_cxx/CMakeFiles/dependency_manager_cxx_static.dir/src/dm_activator.cc.o]
Error 1

The this->dependencies is a std::vector.
Before I make changes to work around this problem, does anyone now if
somehow the remove() member function of vector is removed ? which seems
strange to me. (I have googled it but I did not find similar issues)

Typical is that the remove function is not mentioned in references on the
internet (i.e. cplusplus.com)

 I also tried it in a separate test program. The remove member function is
unknown.

Regards,
Erjan

Re: Celix not building with g++ 7.1.1

Posted by Pepijn Noltes <pe...@gmail.com>.
Hi Erjan,

On Fri, Jul 21, 2017 at 7:39 PM erjan altena <er...@gmail.com> wrote:

> Hi,
>
> I have updated my system to Fedora 26 which comes with g++ 7.1.1 Now
> building Celix fails in the C++ DM.
>
> dependency_manager_cxx/include/celix/dm/Component_Impl.h: In member
> function ‘celix::dm::Component<T>&
> celix::dm::Component<T>::remove(celix::dm::CServiceDependency<T, I>&)’:
>
> /home/erjan/x/c/dependency_manager_cxx/include/celix/dm/Component_Impl.h:140:24:
> error: ‘class std::vector<std::shared_ptr<celix::dm::BaseServiceDependency>
> >’ has no member named ‘remove’; did you mean ‘resize’?
>      this->dependencies.remove(dep);
>                         ^~~~~~
>                         resize
> make[2]: ***
>
> [dependency_manager_cxx/CMakeFiles/dependency_manager_cxx_static.dir/build.make:159:
>
> dependency_manager_cxx/CMakeFiles/dependency_manager_cxx_static.dir/src/dm_activator.cc.o]
> Error 1
>
> The this->dependencies is a std::vector.
> Before I make changes to work around this problem, does anyone now if
> somehow the remove() member function of vector is removed ? which seems
> strange to me. (I have googled it but I did not find similar issues)
>
> Typical is that the remove function is not mentioned in references on the
> internet (i.e. cplusplus.com)
>
>  I also tried it in a separate test program. The remove member function is
> unknown.
>

I am aware of the issue and ran into it a few days ago. I think is due to
the ""stricter rules when using templates" for gcc 7.
Bit of background, original the dependencies where stored in a std::list
and this has changed in a std:vector. std::list has a remove function,
std::vector not.
This combined that the remove dependencies and remove dm components are not
yet tested/used in C++ dependency manager, these template code parts are
incorrect.

I was planning to fix this (and add some usage of the remove
dependency/component code), maybe with combining an update in the travis
config to add a gcc 7 as test target. But feel to pick it up .. ;)



>
> Regards,
> Erjan
>