Skip to content

Fix usage with C++ modules - #283

Open
fedapo wants to merge 1 commit into
boostorg:developfrom
fedapo:fix-build-with-cpp-modules
Open

fedapo wants to merge 1 commit into
boostorg:developfrom
fedapo:fix-build-with-cpp-modules

Conversation

@fedapo

@fedapo fedapo commented Oct 15, 2026

Copy link
Copy Markdown

Fix a compiler error when including Boost.Fusion headers from a C++ module header unit.
Note that one error was not by direct inclusion of Boost.Fusion headers, but through Boost.Spirit.X3.
The errors are the following:

FAILED: [code=1] CMakeFiles/prova_modules.dir/my_module.ixx.o CMakeFiles/prova_modules.dir/mio.modulo.gcm
/usr/bin/c++  -isystem /vcpkg/installed/x64-linux-release/include -O3 -DNDEBUG -std=gnu++26 -Wall -Wextra -MD -MT CMakeFiles/prova_modules.dir/my_module.ixx.o -MF CMakeFiles/prova_modules.dir/my_module.ixx.o.d -fmodules-ts -fmodule-mapper=CMakeFiles/prova_modules.dir/my_module.ixx.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o CMakeFiles/prova_modules.dir/my_module.ixx.o -c <...>/my_module.ixx
In file included from /vcpkg/installed/x64-linux-release/include/boost/fusion/container/vector/detail/at_impl.hpp:12,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/container/vector/vector.hpp:29,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/tuple/tuple.hpp:24,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/tuple.hpp:11,
                 from <...>/my_module.ixx:36:
/vcpkg/installed/x64-linux-release/include/boost/fusion/container/vector/detail/value_at_impl.hpp:50:20: error: ‘template<class Sequence, class N> struct boost::fusion::extension::value_at_impl<boost::fusion::vector_tag>::apply’ exposes TU-local entity ‘template<long unsigned int N, class U> boost::mpl::identity<Key> boost::fusion::vector_detail::value_at_impl(const volatile store<N, U>*)’
   50 |             struct apply : BOOST_FUSION_DECLTYPE_N3031((
      |                    ^~~~~
/vcpkg/installed/x64-linux-release/include/boost/fusion/container/vector/detail/value_at_impl.hpp:38:26: note: ‘template<long unsigned int N, class U> boost::mpl::identity<Key> boost::fusion::vector_detail::value_at_impl(const volatile store<N, U>*)’ declared with internal linkage
   38 |         mpl::identity<U> value_at_impl(store<N, U> const volatile*);
      |                          ^~~~~~~~~~~~~
ninja: build stopped: subcommand failed.
FAILED: [code=1] CMakeFiles/prova_modules.dir/my_module.ixx.o CMakeFiles/prova_modules.dir/mio.modulo.gcm
/usr/bin/c++  -isystem /vcpkg/installed/x64-linux-release/include -O3 -DNDEBUG -std=gnu++26 -Wall -Wextra -MD -MT CMakeFiles/prova_modules.dir/my_module.ixx.o -MF CMakeFiles/prova_modules.dir/my_module.ixx.o.d -fmodules-ts -fmodule-mapper=CMakeFiles/prova_modules.dir/my_module.ixx.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o CMakeFiles/prova_modules.dir/my_module.ixx.o -c <...>/my_module.ixx
In file included from /vcpkg/installed/x64-linux-release/include/boost/fusion/iterator/segmented_iterator.hpp:14,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp:12,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/sequence/intrinsic/begin.hpp:18,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/container/deque/deque.hpp:36,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/container/deque.hpp:13,
                 from /vcpkg/installed/x64-linux-release/include/boost/fusion/include/deque.hpp:11,
                 from /vcpkg/installed/x64-linux-release/include/boost/spirit/home/x3/support/traits/container_traits.hpp:14,
                 from /vcpkg/installed/x64-linux-release/include/boost/spirit/home/x3/auxiliary/any_parser.hpp:15,
                 from /vcpkg/installed/x64-linux-release/include/boost/spirit/home/x3/auxiliary.hpp:11,
                 from /vcpkg/installed/x64-linux-release/include/boost/spirit/home/x3.hpp:62,
                 from <...>/my_module.ixx:35:
/vcpkg/installed/x64-linux-release/include/boost/fusion/container/list/cons.hpp:83:9: error: ‘template<class Car, class Cdr> template<class Sequence> boost::fusion::cons<Car, Cdr>::cons(const Sequence&, typename boost::enable_if<boost::mpl::and_<boost::fusion::traits::is_sequence<Sequence>, boost::mpl::not_<boost::is_base_of<boost::fusion::cons<Car, Cdr>, Sequence> >, boost::mpl::not_<boost::is_convertible<Sequence, Car> > >, boost::fusion::detail::enabler_>::type)’ exposes TU-local entity ‘boost::fusion::detail::enabler’
   83 |         cons(
      |         ^~~~
In file included from /vcpkg/installed/x64-linux-release/include/boost/fusion/container/deque/deque.hpp:25:
/vcpkg/installed/x64-linux-release/include/boost/fusion/support/detail/enabler.hpp:17:33: note: ‘boost::fusion::detail::enabler’ declared with internal linkage
   17 | BOOST_STATIC_CONSTEXPR enabler_ enabler = {};
      |                                 ^~~~~~~
ninja: build stopped: subcommand failed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants