Closed
Description
Hello, thank you for creating this nice library.
I noticed that the copy constructor for the interval_tree
causes a compiler error.
I am using GCC 12.3 on x86_64-linux-gnu and CMake 3.28.2.
This code does not compile (copy assignment also doesn't):
using namespace lib_interval_tree;
interval_tree_t<int> intervals{};
interval_tree_t<int> intervals2(intervals);
This is the error I get:
[build] In file included from MY_CODE/intervals.hpp:7,
[build] from MY_CODE/intervals.cpp:1:
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp: In instantiation of ‘lib_interval_tree::interval_tree<IntervalT, tree_hooks>::node_type* lib_interval_tree::interval_tree<IntervalT, tree_hooks>::copy_tree_impl(node_type*, node_type*) [with IntervalT = lib_interval_tree::interval<int, lib_interval_tree::closed>; tree_hooks = lib_interval_tree::hooks::regular; node_type = lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>]’:
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:935:25: required from ‘lib_interval_tree::interval_tree<IntervalT, tree_hooks>& lib_interval_tree::interval_tree<IntervalT, tree_hooks>::operator=(const lib_interval_tree::interval_tree<IntervalT, tree_hooks>&) [with IntervalT = lib_interval_tree::interval<int, lib_interval_tree::closed>; tree_hooks = lib_interval_tree::hooks::regular]’
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:918:22: required from ‘lib_interval_tree::interval_tree<IntervalT, tree_hooks>::interval_tree(const lib_interval_tree::interval_tree<IntervalT, tree_hooks>&) [with IntervalT = lib_interval_tree::interval<int, lib_interval_tree::closed>; tree_hooks = lib_interval_tree::hooks::regular]’
[build] MY_CODE/intervals.cpp:103:46: required from here
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:1471:29: error: no matching function for call to ‘lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>::node(lib_interval_tree::interval_tree<lib_interval_tree::interval<int, lib_interval_tree::closed>, lib_interval_tree::hooks::regular>::node_type*&, const lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>::interval_type*)’
[build] 1471 | auto* cpy = new node_type(parent, root->interval());
[build] | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:379:9: note: candidate: ‘lib_interval_tree::node<numerical_type, interval_type, derived>::node(node_type*, interval_type) [with numerical_type = int; interval_type_ = lib_interval_tree::interval<int, lib_interval_tree::closed>; derived = void; node_type = lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>; interval_type = lib_interval_tree::interval<int, lib_interval_tree::closed>]’
[build] 379 | node(node_type* parent, interval_type interval)
[build] | ^~~~
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:379:47: note: no known conversion for argument 2 from ‘const lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>::interval_type*’ {aka ‘const lib_interval_tree::interval<int, lib_interval_tree::closed>*’} to ‘lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>::interval_type’ {aka ‘lib_interval_tree::interval<int, lib_interval_tree::closed>’}
[build] 379 | node(node_type* parent, interval_type interval)
[build] | ~~~~~~~~~~~~~~^~~~~~~~
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:353:11: note: candidate: ‘constexpr lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>::node(const lib_interval_tree::node<int, lib_interval_tree::interval<int, lib_interval_tree::closed>, void>&)’
[build] 353 | class node
[build] | ^~~~
[build] (...)/interval-tree/26a47086beff5cd25c72fab5acc709bac57b4494/include/interval-tree/interval_tree.hpp:353:11: note: candidate expects 1 argument, 2 provided
The move constructor and move assignment do not cause issues.
Metadata
Metadata
Assignees
Labels
No labels