Skip to content

quantum won't compile due to usage of non-standard and non-portable C++ extensions #150

@robinchrist

Description

@robinchrist

I was trying to include quantum simply as a subproject, but I can even get it to work in a very reduced example.

First approach (what should work for a properly written header only library based on CMake):

add_executable(TestExec main.cpp)
add_subdirectory(quantum)
target_link_libraries(TestExec PUBLIC quantum)

Does not work, because:

[1/2] Building CXX object CMakeFiles/TestExec.dir/main.cpp.o
FAILED: CMakeFiles/TestExec.dir/main.cpp.o 
/usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_CONTEXT_DYN_LINK  -fPIE -fno-math-errno -ferror-limit=0 -std=c++17 -MD -MT CMakeFiles/TestExec.dir/main.cpp.o -MF CMakeFiles/TestExec.dir/main.cpp.o.d -o CMakeFiles/TestExec.dir/main.cpp.o -c ../main.cpp
../main.cpp:1:10: fatal error: 'quantum/quantum.h' file not found
#include <quantum/quantum.h>
         ^~~~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

Not surprising, because:

add_library(${PROJECT_TARGET_NAME} INTERFACE)
set(QUANTUM_DEPENDENCIES Boost::context pthread)
set_target_properties(${PROJECT_TARGET_NAME} PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include>
        INTERFACE_LINK_LIBRARIES "${QUANTUM_DEPENDENCIES}"
        INTERFACE_POSITION_INDEPENDENT_CODE ON
        #INTERFACE_SOURCES "$<INSTALL_INTERFACE:include>/${PROJECT_TARGET_NAME}/quantum.h"
)

It seems like the quantum CMake file was never meant to be used without installing...

Okay, no problem: It's a header only library, right? Let's just include the directory.

find_package(Boost 1.72 REQUIRED COMPONENTS context)

add_executable(TestExec main.cpp)
add_subdirectory(quantum)
target_include_directories(TestExec PUBLIC quantum)

target_link_libraries(TestExec PUBLIC Boost::headers Boost::context)

Well, that doesn't work:

[1/2] Building CXX object CMakeFiles/TestExec.dir/main.cpp.o
FAILED: CMakeFiles/TestExec.dir/main.cpp.o 
/usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_CONTEXT_DYN_LINK -I../quantum -fno-math-errno -ferror-limit=0 -std=c++17 -MD -MT CMakeFiles/TestExec.dir/main.cpp.o -MF CMakeFiles/TestExec.dir/main.cpp.o.d -o CMakeFiles/TestExec.dir/main.cpp.o -c ../main.cpp
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:20:
In file included from ../quantum/quantum/interface/quantum_icontext.h:20:
In file included from ../quantum/quantum/interface/quantum_ithread_context.h:19:
In file included from ../quantum/quantum/quantum_traits.h:19:
In file included from ../quantum/quantum/quantum_allocator.h:22:
In file included from ../quantum/quantum/quantum_stack_allocator.h:19:
In file included from ../quantum/quantum/quantum_contiguous_pool_manager.h:20:
../quantum/quantum/quantum_spinlock.h:42:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    SpinLock(SpinLock&&) = default;
    ^
../quantum/quantum/quantum_spinlock.h:146:39: note: move constructor of 'SpinLock' is implicitly deleted because field '_flag' has a deleted move constructor
    alignas(128) std::atomic_uint32_t _flag{0};
                                      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:778:7: note: 'atomic' has been explicitly marked deleted here
      atomic(const atomic&) = delete;
      ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:20:
In file included from ../quantum/quantum/interface/quantum_icontext.h:20:
In file included from ../quantum/quantum/interface/quantum_ithread_context.h:19:
In file included from ../quantum/quantum/quantum_traits.h:19:
In file included from ../quantum/quantum/quantum_allocator.h:22:
In file included from ../quantum/quantum/quantum_stack_allocator.h:19:
In file included from ../quantum/quantum/quantum_contiguous_pool_manager.h:20:
../quantum/quantum/quantum_spinlock.h:48:15: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    SpinLock& operator=(SpinLock&&) = default;
              ^
../quantum/quantum/quantum_spinlock.h:146:39: note: move assignment operator of 'SpinLock' is implicitly deleted because field '_flag' has a deleted move assignment operator
    alignas(128) std::atomic_uint32_t _flag{0};
                                      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:779:15: note: 'operator=' has been explicitly marked deleted here
      atomic& operator=(const atomic&) = delete;
              ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:20:
../quantum/quantum/quantum_task.h:68:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    Task(Task&& task) = default;
    ^
../quantum/quantum/quantum_task.h:152:33: note: move constructor of 'Task' is implicitly deleted because field '_terminated' has a deleted move constructor
    std::atomic_bool            _terminated;
                                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:20:
../quantum/quantum/quantum_task.h:70:11: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    Task& operator=(Task&& task) = default;
          ^
../quantum/quantum/quantum_task.h:152:33: note: move assignment operator of 'Task' is implicitly deleted because field '_terminated' has a deleted move assignment operator
    std::atomic_bool            _terminated;
                                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:74:13: note: 'operator=' has been explicitly marked deleted here
    atomic& operator=(const atomic&) = delete;
            ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:21:
../quantum/quantum/quantum_io_task.h:57:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    IoTask(IoTask&& task) = default;
    ^
../quantum/quantum/quantum_io_task.h:87:29: note: move constructor of 'IoTask' is implicitly deleted because field '_terminated' has a deleted move constructor
    std::atomic_bool        _terminated;
                            ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:21:
../quantum/quantum/quantum_io_task.h:59:13: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    IoTask& operator=(IoTask&& task) = default;
            ^
../quantum/quantum/quantum_io_task.h:87:29: note: move assignment operator of 'IoTask' is implicitly deleted because field '_terminated' has a deleted move assignment operator
    std::atomic_bool        _terminated;
                            ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:74:13: note: 'operator=' has been explicitly marked deleted here
    atomic& operator=(const atomic&) = delete;
            ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:20:
In file included from ../quantum/quantum/interface/quantum_icontext.h:19:
In file included from ../quantum/quantum/interface/quantum_icontext_base.h:19:
In file included from ../quantum/quantum/quantum_task_id.h:89:
In file included from ../quantum/quantum/impl/quantum_task_id_impl.h:21:
In file included from /usr/local/include/boost/functional/hash.hpp:6:
In file included from /usr/local/include/boost/container_hash/hash.hpp:761:
In file included from /usr/local/include/boost/container_hash/extensions.hpp:22:
In file included from /usr/local/include/boost/detail/container_fwd.hpp:92:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/list:63:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_list.h:567:7: error: static_assert failed due to requirement 'is_same<std::shared_ptr<Bloomberg::quantum::ITask>, std::shared_ptr<Bloomberg::quantum::Task>>::value' "std::list must have the same value_type as its allocator"
      static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../quantum/quantum/quantum_task_queue.h:50:26: note: in instantiation of template class 'std::list<std::shared_ptr<Bloomberg::quantum::Task>, Bloomberg::quantum::ContiguousPoolManager<std::shared_ptr<Bloomberg::quantum::ITask>>>' requested here
    using TaskListIter = TaskList::iterator;
                         ^
../quantum/quantum/quantum_task_queue.h:95:18: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                 TaskListIter iter,
                 ^~~~~~~~~~~~
                 TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
../quantum/quantum/quantum_task_queue.h:100:9: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
        TaskListIter    _iter;              // task iterator
        ^~~~~~~~~~~~
        TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
../quantum/quantum/quantum_task_queue.h:132:26: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                         TaskListIter iter);
                         ^~~~~~~~~~~~
                         TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
../quantum/quantum/quantum_task_queue.h:143:5: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
    TaskListIter                        _queueIt;
    ^~~~~~~~~~~~
    TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
../quantum/quantum/quantum_task_queue.h:144:5: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
    TaskListIter                        _blockedIt;
    ^~~~~~~~~~~~
    TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
In file included from ../quantum/quantum/quantum_task_queue.h:166:
../quantum/quantum/impl/quantum_task_queue_impl.h:29:31: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                              TaskListIter iter,
                              ^~~~~~~~~~~~
                              TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
In file included from ../quantum/quantum/quantum_task_queue.h:166:
../quantum/quantum/impl/quantum_task_queue_impl.h:195:37: error: no matching constructor for initialization of 'IQueue::TaskSetterGuard'
            IQueue::TaskSetterGuard taskSetter(*this, task);
                                    ^          ~~~~~~~~~~~
../quantum/quantum/interface/quantum_iqueue.h:161:26: note: candidate constructor not viable: no known conversion from 'Bloomberg::quantum::TaskQueue' to 'Bloomberg::quantum::IQueue &' for 1st argument
IQueue::TaskSetterGuard::TaskSetterGuard(IQueue& taskQueue,
                         ^
../quantum/quantum/interface/quantum_iqueue.h:83:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
    struct TaskSetterGuard
           ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
In file included from ../quantum/quantum/quantum_task_queue.h:166:
../quantum/quantum/impl/quantum_task_queue_impl.h:308:52: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
ITask::Ptr TaskQueue::doDequeue(std::atomic_bool&, TaskListIter iter)
                                                   ^~~~~~~~~~~~
                                                   TaskList
../quantum/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
In file included from ../quantum/quantum/quantum_task_queue.h:166:
../quantum/quantum/impl/quantum_task_queue_impl.h:321:23: error: indirection requires pointer operand ('Bloomberg::quantum::TaskQueue::TaskList' (aka 'list<shared_ptr<Bloomberg::quantum::Task>, ContiguousPoolManager<shared_ptr<Bloomberg::quantum::ITask>>>') invalid)
    ITask::Ptr task = *iter;
                      ^~~~~
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:20:
In file included from ../quantum/quantum/interface/quantum_icontext.h:19:
In file included from ../quantum/quantum/interface/quantum_icontext_base.h:19:
In file included from ../quantum/quantum/quantum_task_id.h:89:
In file included from ../quantum/quantum/impl/quantum_task_id_impl.h:21:
In file included from /usr/local/include/boost/functional/hash.hpp:6:
In file included from /usr/local/include/boost/container_hash/hash.hpp:761:
In file included from /usr/local/include/boost/container_hash/extensions.hpp:22:
In file included from /usr/local/include/boost/detail/container_fwd.hpp:92:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/list:63:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_list.h:567:7: error: static_assert failed due to requirement 'is_same<std::shared_ptr<Bloomberg::quantum::ITask>, std::shared_ptr<Bloomberg::quantum::IoTask>>::value' "std::list must have the same value_type as its allocator"
      static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../quantum/quantum/quantum_io_queue.h:44:26: note: in instantiation of template class 'std::list<std::shared_ptr<Bloomberg::quantum::IoTask>, Bloomberg::quantum::StackAllocator<std::shared_ptr<Bloomberg::quantum::ITask>, 1000>>' requested here
    using TaskListIter = TaskList::iterator;
                         ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:21:
In file included from ../quantum/quantum/quantum_io_queue.h:114:
../quantum/quantum/impl/quantum_io_queue_impl.h:130:37: error: no matching constructor for initialization of 'IQueue::TaskSetterGuard'
            IQueue::TaskSetterGuard taskSetter(*this, task);
                                    ^          ~~~~~~~~~~~
../quantum/quantum/interface/quantum_iqueue.h:161:26: note: candidate constructor not viable: no known conversion from 'Bloomberg::quantum::IoQueue' to 'Bloomberg::quantum::IQueue &' for 1st argument
IQueue::TaskSetterGuard::TaskSetterGuard(IQueue& taskQueue,
                         ^
../quantum/quantum/interface/quantum_iqueue.h:83:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
    struct TaskSetterGuard
           ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:63:
In file included from ../quantum/quantum/quantum_read_write_mutex.h:19:
../quantum/quantum/quantum_read_write_spinlock.h:36:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    ReadWriteSpinLock(ReadWriteSpinLock&&) = default;
    ^
../quantum/quantum/quantum_read_write_spinlock.h:171:39: note: move constructor of 'ReadWriteSpinLock' is implicitly deleted because field '_count' has a deleted move constructor
    alignas(128) std::atomic_uint32_t _count{0};
                                      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:778:7: note: 'atomic' has been explicitly marked deleted here
      atomic(const atomic&) = delete;
      ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:63:
In file included from ../quantum/quantum/quantum_read_write_mutex.h:19:
../quantum/quantum/quantum_read_write_spinlock.h:42:24: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    ReadWriteSpinLock& operator=(ReadWriteSpinLock&&) = default;
                       ^
../quantum/quantum/quantum_read_write_spinlock.h:171:39: note: move assignment operator of 'ReadWriteSpinLock' is implicitly deleted because field '_count' has a deleted move assignment operator
    alignas(128) std::atomic_uint32_t _count{0};
                                      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:779:15: note: 'operator=' has been explicitly marked deleted here
      atomic& operator=(const atomic&) = delete;
              ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:63:
../quantum/quantum/quantum_read_write_mutex.h:36:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    ReadWriteMutex(ReadWriteMutex&&) = default;
    ^
../quantum/quantum/quantum_read_write_mutex.h:202:33: note: move constructor of 'ReadWriteMutex' is implicitly deleted because field '_spinlock' has a deleted move constructor
    mutable ReadWriteSpinLock   _spinlock;
                                ^
../quantum/quantum/quantum_read_write_spinlock.h:33:5: note: 'ReadWriteSpinLock' has been explicitly marked deleted here
    ReadWriteSpinLock(const ReadWriteSpinLock&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:63:
../quantum/quantum/quantum_read_write_mutex.h:42:21: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    ReadWriteMutex& operator=(ReadWriteMutex&&) = default;
                    ^
../quantum/quantum/quantum_read_write_mutex.h:202:33: note: move assignment operator of 'ReadWriteMutex' is implicitly deleted because field '_spinlock' has a deleted move assignment operator
    mutable ReadWriteSpinLock   _spinlock;
                                ^
../quantum/quantum/quantum_read_write_spinlock.h:39:24: note: 'operator=' has been explicitly marked deleted here
    ReadWriteSpinLock& operator=(const ReadWriteSpinLock&) = delete;
                       ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'Bloomberg::quantum::SpinLock'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/ext/new_allocator.h:147:23: note: in defaulted move constructor for 'Bloomberg::quantum::TaskQueue' first required here
        { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
                             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/alloc_traits.h:484:8: note: in instantiation of function template specialization '__gnu_cxx::new_allocator<Bloomberg::quantum::TaskQueue>::construct<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue>' requested here
        { __a.construct(__p, std::forward<_Args>(__args)...); }
              ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:912:17: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<Bloomberg::quantum::TaskQueue>>::construct<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue>' requested here
      __traits::construct(__alloc, __dest, std::move(*__orig));
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:950:7: note: in instantiation of function template specialization 'std::__relocate_object_a<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
        std::__relocate_object_a(std::__addressof(*__cur),
             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:964:14: note: in instantiation of function template specialization 'std::__relocate_a_1<Bloomberg::quantum::TaskQueue *, Bloomberg::quantum::TaskQueue *, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
      return __relocate_a_1(std::__niter_base(__first),
             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:453:14: note: in instantiation of function template specialization 'std::__relocate_a<Bloomberg::quantum::TaskQueue *, Bloomberg::quantum::TaskQueue *, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
        return std::__relocate_a(__first, __last, __result, __alloc);
                    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:466:9: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::_S_do_relocate' requested here
        return _S_do_relocate(__first, __last, __result, __alloc, __do_it{});
               ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/vector.tcc:79:8: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::_S_relocate' requested here
              _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish,
              ^
../quantum/quantum/impl/quantum_dispatcher_core_impl.h:57:17: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::reserve' requested here
    _coroQueues.reserve(coroCount);
                ^
../quantum/quantum/quantum_spinlock.h:39:5: note: 'SpinLock' has been explicitly marked deleted here
    SpinLock(const SpinLock&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'Bloomberg::quantum::SpinLock'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
../quantum/quantum/quantum_spinlock.h:39:5: note: 'SpinLock' has been explicitly marked deleted here
    SpinLock(const SpinLock&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::mutex'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_mutex.h:94:5: note: 'mutex' has been explicitly marked deleted here
    mutex(const mutex&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::condition_variable'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/condition_variable:84:5: note: 'condition_variable' has been explicitly marked deleted here
    condition_variable(const condition_variable&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from ../quantum/quantum/quantum.h:48:
In file included from ../quantum/quantum/quantum_context.h:22:
In file included from ../quantum/quantum/quantum_dispatcher_core.h:20:
../quantum/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
10 warnings and 21 errors generated.
ninja: build stopped: subcommand failed.

Okay, cool, that must be due to me including this project as a subdirectory, right? Let's try with the "official" install path:

set(CMAKE_PREFIX_PATH /data/dev/quantum_install_test/)
find_package(Quantum)

add_executable(TestExec main.cpp)
target_link_libraries(TestExec Quantum::quantum)
[1/2] Building CXX object CMakeFiles/TestExec.dir/main.cpp.o
FAILED: CMakeFiles/TestExec.dir/main.cpp.o 
/usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_CONTEXT_DYN_LINK -isystem /data/dev/quantum_install_test/include -fPIE -fno-math-errno -ferror-limit=0 -std=c++17 -MD -MT CMakeFiles/TestExec.dir/main.cpp.o -MF CMakeFiles/TestExec.dir/main.cpp.o.d -o CMakeFiles/TestExec.dir/main.cpp.o -c ../main.cpp
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/interface/quantum_icontext.h:19:
In file included from /data/dev/quantum_install_test/include/quantum/interface/quantum_icontext_base.h:19:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_id.h:89:
In file included from /data/dev/quantum_install_test/include/quantum/impl/quantum_task_id_impl.h:21:
In file included from /usr/local/include/boost/functional/hash.hpp:6:
In file included from /usr/local/include/boost/container_hash/hash.hpp:761:
In file included from /usr/local/include/boost/container_hash/extensions.hpp:22:
In file included from /usr/local/include/boost/detail/container_fwd.hpp:92:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/list:63:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_list.h:567:7: error: static_assert failed due to requirement 'is_same<std::shared_ptr<Bloomberg::quantum::ITask>, std::shared_ptr<Bloomberg::quantum::Task>>::value' "std::list must have the same value_type as its allocator"
      static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:50:26: note: in instantiation of template class 'std::list<std::shared_ptr<Bloomberg::quantum::Task>, Bloomberg::quantum::ContiguousPoolManager<std::shared_ptr<Bloomberg::quantum::ITask>>>' requested here
    using TaskListIter = TaskList::iterator;
                         ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:95:18: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                 TaskListIter iter,
                 ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:100:9: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
        TaskListIter    _iter;              // task iterator
        ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:132:26: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                         TaskListIter iter);
                         ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:143:5: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
    TaskListIter                        _queueIt;
    ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:144:5: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
    TaskListIter                        _blockedIt;
    ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:166:
/data/dev/quantum_install_test/include/quantum/impl/quantum_task_queue_impl.h:29:31: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
                              TaskListIter iter,
                              ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:166:
/data/dev/quantum_install_test/include/quantum/impl/quantum_task_queue_impl.h:195:37: error: no matching constructor for initialization of 'IQueue::TaskSetterGuard'
            IQueue::TaskSetterGuard taskSetter(*this, task);
                                    ^          ~~~~~~~~~~~
/data/dev/quantum_install_test/include/quantum/interface/quantum_iqueue.h:161:26: note: candidate constructor not viable: no known conversion from 'Bloomberg::quantum::TaskQueue' to 'Bloomberg::quantum::IQueue &' for 1st argument
IQueue::TaskSetterGuard::TaskSetterGuard(IQueue& taskQueue,
                         ^
/data/dev/quantum_install_test/include/quantum/interface/quantum_iqueue.h:83:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
    struct TaskSetterGuard
           ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:166:
/data/dev/quantum_install_test/include/quantum/impl/quantum_task_queue_impl.h:308:52: error: unknown type name 'TaskListIter'; did you mean 'TaskList'?
ITask::Ptr TaskQueue::doDequeue(std::atomic_bool&, TaskListIter iter)
                                                   ^
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:49:11: note: 'TaskList' declared here
    using TaskList = std::list<Task::Ptr, ContiguousPoolManager<ITask::Ptr>>;
          ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:166:
/data/dev/quantum_install_test/include/quantum/impl/quantum_task_queue_impl.h:321:23: error: indirection requires pointer operand ('Bloomberg::quantum::TaskQueue::TaskList' (aka 'list<shared_ptr<Bloomberg::quantum::Task>, ContiguousPoolManager<shared_ptr<Bloomberg::quantum::ITask>>>') invalid)
    ITask::Ptr task = *iter;
                      ^~~~~
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:20:
In file included from /data/dev/quantum_install_test/include/quantum/interface/quantum_icontext.h:19:
In file included from /data/dev/quantum_install_test/include/quantum/interface/quantum_icontext_base.h:19:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_task_id.h:89:
In file included from /data/dev/quantum_install_test/include/quantum/impl/quantum_task_id_impl.h:21:
In file included from /usr/local/include/boost/functional/hash.hpp:6:
In file included from /usr/local/include/boost/container_hash/hash.hpp:761:
In file included from /usr/local/include/boost/container_hash/extensions.hpp:22:
In file included from /usr/local/include/boost/detail/container_fwd.hpp:92:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/list:63:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_list.h:567:7: error: static_assert failed due to requirement 'is_same<std::shared_ptr<Bloomberg::quantum::ITask>, std::shared_ptr<Bloomberg::quantum::IoTask>>::value' "std::list must have the same value_type as its allocator"
      static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/data/dev/quantum_install_test/include/quantum/quantum_io_queue.h:44:26: note: in instantiation of template class 'std::list<std::shared_ptr<Bloomberg::quantum::IoTask>, Bloomberg::quantum::StackAllocator<std::shared_ptr<Bloomberg::quantum::ITask>, 1000>>' requested here
    using TaskListIter = TaskList::iterator;
                         ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:21:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_io_queue.h:114:
/data/dev/quantum_install_test/include/quantum/impl/quantum_io_queue_impl.h:130:37: error: no matching constructor for initialization of 'IQueue::TaskSetterGuard'
            IQueue::TaskSetterGuard taskSetter(*this, task);
                                    ^          ~~~~~~~~~~~
/data/dev/quantum_install_test/include/quantum/interface/quantum_iqueue.h:161:26: note: candidate constructor not viable: no known conversion from 'Bloomberg::quantum::IoQueue' to 'Bloomberg::quantum::IQueue &' for 1st argument
IQueue::TaskSetterGuard::TaskSetterGuard(IQueue& taskQueue,
                         ^
/data/dev/quantum_install_test/include/quantum/interface/quantum_iqueue.h:83:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
    struct TaskSetterGuard
           ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'Bloomberg::quantum::SpinLock'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/ext/new_allocator.h:147:23: note: in defaulted move constructor for 'Bloomberg::quantum::TaskQueue' first required here
        { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
                             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/alloc_traits.h:484:8: note: in instantiation of function template specialization '__gnu_cxx::new_allocator<Bloomberg::quantum::TaskQueue>::construct<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue>' requested here
        { __a.construct(__p, std::forward<_Args>(__args)...); }
              ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:912:17: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<Bloomberg::quantum::TaskQueue>>::construct<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue>' requested here
      __traits::construct(__alloc, __dest, std::move(*__orig));
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:950:7: note: in instantiation of function template specialization 'std::__relocate_object_a<Bloomberg::quantum::TaskQueue, Bloomberg::quantum::TaskQueue, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
        std::__relocate_object_a(std::__addressof(*__cur),
             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_uninitialized.h:964:14: note: in instantiation of function template specialization 'std::__relocate_a_1<Bloomberg::quantum::TaskQueue *, Bloomberg::quantum::TaskQueue *, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
      return __relocate_a_1(std::__niter_base(__first),
             ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:453:14: note: in instantiation of function template specialization 'std::__relocate_a<Bloomberg::quantum::TaskQueue *, Bloomberg::quantum::TaskQueue *, std::allocator<Bloomberg::quantum::TaskQueue>>' requested here
        return std::__relocate_a(__first, __last, __result, __alloc);
                    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:466:9: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::_S_do_relocate' requested here
        return _S_do_relocate(__first, __last, __result, __alloc, __do_it{});
               ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/vector.tcc:79:8: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::_S_relocate' requested here
              _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish,
              ^
/data/dev/quantum_install_test/include/quantum/impl/quantum_dispatcher_core_impl.h:57:17: note: in instantiation of member function 'std::vector<Bloomberg::quantum::TaskQueue>::reserve' requested here
    _coroQueues.reserve(coroCount);
                ^
/data/dev/quantum_install_test/include/quantum/quantum_spinlock.h:39:5: note: 'SpinLock' has been explicitly marked deleted here
    SpinLock(const SpinLock&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'Bloomberg::quantum::SpinLock'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/data/dev/quantum_install_test/include/quantum/quantum_spinlock.h:39:5: note: 'SpinLock' has been explicitly marked deleted here
    SpinLock(const SpinLock&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::mutex'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_mutex.h:94:5: note: 'mutex' has been explicitly marked deleted here
    mutex(const mutex&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::condition_variable'
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/condition_variable:84:5: note: 'condition_variable' has been explicitly marked deleted here
    condition_variable(const condition_variable&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
In file included from ../main.cpp:1:
In file included from /data/dev/quantum_install_test/include/quantum/quantum.h:48:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_context.h:22:
In file included from /data/dev/quantum_install_test/include/quantum/quantum_dispatcher_core.h:20:
/data/dev/quantum_install_test/include/quantum/quantum_task_queue.h:59:5: error: call to deleted constructor of 'std::atomic_bool' (aka 'atomic<bool>')
    TaskQueue(TaskQueue&& other) = default;
    ^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/atomic:73:5: note: 'atomic' has been explicitly marked deleted here
    atomic(const atomic&) = delete;
    ^
21 errors generated.
ninja: build stopped: subcommand failed.

Nope, that wasn't it.

main.cpp simply includes the quantum header for a start:

#include <quantum/quantum.h>

int main() {
    return 0;
}

Tested on Ubuntu 20.04 with Clang 12.0.1

What am I missing?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions