Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
robinchrist opened this issue Aug 25, 2021 · 6 comments

Comments

@robinchrist
Copy link

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?

@robinchrist robinchrist changed the title quantum can't be used as a subproject without installing quantum won't compile (neither as subproject, nor directly included or installed version) Aug 25, 2021
@robinchrist
Copy link
Author

Update:

There was a
CXX_EXTENSIONS NO

in the CMakeLists as part of my usual boilerplate.
Turns out that's the issue...

Is there a specific reason why non-standard / non-portable C++ extensions are necessary?

@robinchrist robinchrist changed the title quantum won't compile (neither as subproject, nor directly included or installed version) quantum won't compile due to usage of non-standard and non-portable C++ extensions Aug 25, 2021
@accelerated
Copy link
Contributor

Hi @robinchrist I don't think there's any specific reason for using non-standard extensions. I think this compiler issue should be fixed. Since the copy constructor is explicitly deleted for atomics, the move assignment for the spinlock should be written-out rather than defaulted. If you can work with the CXX_EXTENSIONS flag on for the time being it would be great.

@safaruqi
Copy link
Contributor

Hi @robinchrist Please try the change in this pull request. We will merge if this fixes the issue.
#152

@robinchrist
Copy link
Author

robinchrist commented Sep 19, 2021

Hi,

Sorry for my later reply, I've been out of office.

Unfortunately, your PR #152 does not yet fix the issue:

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 'std::mutex'
    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);
                ^
/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;
    ^
8 warnings and 19 errors generated.
ninja: build stopped: subcommand failed.

quantum_test.zip

I have attached a framework for a simple repro, just make sure you're using Clang as your compiler (Ubuntu clang version 12.0.1-++20210825102835+fed41342a82f-1~exp1~20210825083541.133 for me). The quantum folder contains the contents of safaruqi@36f9da2

mkdir build && cd build && cmake -GNinja .. && ninja

It should be the same on all Linux distributions, given you're using Clang 12 and the CMake with CXX_EXTENSIONS OFF

@safaruqi
Copy link
Contributor

Thanks for providing the framework above for reproducing the issue. I created a newer build environment with newer clang and am now able to reproduce the errors that you are getting. Will work on fixing them when I get some time next.

@safaruqi
Copy link
Contributor

Hi @robinchrist Please try the change in pull request #153. This should fix the issue.

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

No branches or pull requests

3 participants