Giter Site home page Giter Site logo

think-cell / think-cell-library Goto Github PK

View Code? Open in Web Editor NEW
399.0 38.0 49.0 2.59 MB

think-cell core library

Home Page: https://www.think-cell.com/en/career/devblog/overview

License: Boost Software License 1.0

C++ 99.91% C 0.03% CMake 0.06%
algorithms containers cpp ranges

think-cell-library's Introduction

CI

think-cell public library

This library consists of several core C++ utilities that we at think-cell Software have developed and consider to be useful. It mostly covers ranges, but you will see that it also contains other handy features.

We continuously improve our library as part of our daily work, and whenever we gain new insights, we add them as we go. To get in touch with other programmers, we regularly give talks about our ideas, using this library as a reference.

We consider the library to be production-quality code, but it is important to know that we do not strive for stable interfaces. Being free of such constraints is an important requirement for further enhancements.

Clean and expressive code makes reasoning about it - and thus further progress - easier. Therefore, we adopt the latest language features quickly if it helps the case.

This library has been made publicly available as an example of modern C++ coding techniques and as a source of inspiration for other library writers. And of course because we are proud of it!

The documentation is currently lacking and we are working on that. We will publish usage examples on our new developer blog and will merge them into the library as comments.


Contributions

If you propose a change that improves correctness or standard-conformance, we encourage you to make a pull request. But please understand that, for the above-mentioned reasons, we are not keen on workarounds to accommodate outdated compilers.

Does hacking our library give you a kick, and do you think you can contribute more? We are a friendly and driven bunch of C++ enthusiasts with a knack for elegant algorithms, and we are always looking for new colleagues.


Usage instructions

You need to have boost installed (we tested with 1.75.0) and the following compiler settings:

Visual C++ 19.28 (Visual Studio 2019 16.9)
  • /std:c++latest
clang (13.0.0 and Apple LLVM 14.0.0)
  • -std=c++2a
gcc 12
  • -std=c++2a

range.example.cpp provides a good entry point to get started quickly. If you want to see more examples, there are some unit tests in tc/*.t.cpp.

think-cell-library's People

Contributors

foonathan avatar fracassi avatar frederich avatar kdungs avatar stheophil avatar treh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

think-cell-library's Issues

build range examples with msvc

It's not possible to build range examples with msvc tool chain. See commit 262fb81. Revert CMakeLists.txt changes.

A pull request is comming soon.

if (MSVC)
    include_directories(C:/Libraries/boost_1_59_0/)
    add_definitions(-DBOOST_ALL_NO_LIB -D_SCL_SECURE_NO_WARNINGS)
    set(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1")
        set(CMAKE_CXX_FLAGS_MINSIZEREL     "/MT /O1 /Ob1 /D NDEBUG")
        set(CMAKE_CXX_FLAGS_RELEASE        "/MT /O2 /Ob2 /D NDEBUG")
        set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG")
else ()
...

complement Linux build settings

Please complement build instructions. I can create a pull request if you accept it?

build example on Linux (Ubuntu 14.04 64-bit LTS):

% apt-get install clang llvm libc++-dev libc++abi-dev git cmake
% sudo update-alternatives --config c++  // use option 2

% sudo update-alternatives --config c++
There are 3 choices for the alternative c++ (providing /usr/bin/c++).
  Selection    Path                     Priority   Status
------------------------------------------------------------
  0            /usr/bin/g++              20        auto mode
  1            /usr/bin/clang++          10        manual mode
* 2            /usr/bin/clang++-libc++   5         manual mode
  3            /usr/bin/g++              20        manual mode
Press enter to keep the current choice[*], or type selection number:

% wget  http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.59.0%2F&ts=1458123810&use_mirror=kent
% mv boost_1_59_0.tar.gz\?r\=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.59.0%2F boost_1_59_0.tar.gz
% tar xvfz boost_1_59_0.tar.gz
% cd boost_1_59_0
% ./bootstrap.sh
% ./b2

% git clone https://github.com/think-cell/range.git
% cd range
% mkdir build
% cd build
% cmake -DBOOST_ROOT=/path/to/boost_1_59_0 ../Library/Utilities/Range
% make
% ./example_range.example.cpp

header file missing

The header file Library/Utilities/SetAndRestore.h is missing on tip. Look at:

Library/Utilities/Range/algorithm.h
...

ifdef _DEBUG

include "Library/Utilities/SetAndRestore.h"

endif

...

Can't build with gcc13

Cpp 20 flag already set in CMakeLists:
set(CMAKE_CXX_STANDARD 20)

Here is the build log:

$ cmake --build . 
[ 72%] Built target compile_test
Consolidate compiler generated dependencies of target unit_test
[ 73%] Building CXX object CMakeFiles/unit_test.dir/tc/dense_map.t.cpp.o
In file included from /home/andrei/sources/think-cell-library/tc/base/casts.h:12,
                 from /home/andrei/sources/think-cell-library/tc/base/reference_or_value.h:13,
                 from /home/andrei/sources/think-cell-library/tc/array.h:12,
                 from /home/andrei/sources/think-cell-library/tc/unittest.h:10,
                 from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/home/andrei/sources/think-cell-library/tc/base/functors.h:142:91: warning: friend declaration ‘tc::constant<true> tc::mem_fn_adl::returns_reference_to_argument(tc::mem_fn_adl::wrap_xvalue_by_ref<Lambda>)’ declares a non-template function [-Wnon-template-friend]
  142 |                 friend tc::constant<true> returns_reference_to_argument(wrap_xvalue_by_ref); // mark as returning reference to argument
      |                                                                                           ^
/home/andrei/sources/think-cell-library/tc/base/functors.h:142:91: note: (if this is not what you intended, make sure the function template has already been declared and add ‘<>’ after the function name here)
In file included from /home/andrei/sources/think-cell-library/tc/algorithm/../range/transform_adaptor.h:14,
                 from /home/andrei/sources/think-cell-library/tc/algorithm/compare.h:18,
                 from /home/andrei/sources/think-cell-library/tc/array.h:17,
                 from /home/andrei/sources/think-cell-library/tc/unittest.h:10,
                 from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/home/andrei/sources/think-cell-library/tc/algorithm/../range/range_adaptor.h:223:46: warning: friend declaration ‘tc::type::unique_t<tc::type::no_adl::list<typename tc::no_adl::remove_rvalue_reference<T>::type ...> > tc::generator_range_output_adaptor_adl::range_output_t_impl(const tc::generator_range_output_adaptor_adl::generator_range_output_adaptor<Rng, tc::type::no_adl::list<T ...> >&)’ declares a non-template function [-Wnon-template-friend]
  223 |                                 -> tc::type::unique_t<tc::type::list<tc::remove_rvalue_reference_t<T>...>>; // declaration only
      |                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/iota_range.h:11,
                 from /home/andrei/sources/think-cell-library/tc/algorithm/../base/invoke_with_constant.h:14,
                 from /home/andrei/sources/think-cell-library/tc/algorithm/../variant.h:16,
                 from /home/andrei/sources/think-cell-library/tc/algorithm/quantifier.h:13,
                 from /home/andrei/sources/think-cell-library/tc/array.h:20,
                 from /home/andrei/sources/think-cell-library/tc/unittest.h:10,
                 from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:203:92: warning: friend declaration ‘tc::constant<true> tc::fn_front_adl::returns_reference_to_argument(tc::fn_front_adl::fn_front<RangeReturn>)’ declares a non-template function [-Wnon-template-friend]
  203 |                         friend tc::constant<true> returns_reference_to_argument(fn_ ## name); /*mark as returning reference to argument. */ \
      |                                                                                            ^
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:216:9: note: in expansion of macro ‘RETURN_REFERENCE_FROM_ELEMENT’
  216 |         RETURN_REFERENCE_FROM_ELEMENT(front)
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:203:92: warning: friend declaration ‘tc::constant<true> tc::fn_back_adl::returns_reference_to_argument(tc::fn_back_adl::fn_back<RangeReturn>)’ declares a non-template function [-Wnon-template-friend]
  203 |                         friend tc::constant<true> returns_reference_to_argument(fn_ ## name); /*mark as returning reference to argument. */ \
      |                                                                                            ^
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:217:9: note: in expansion of macro ‘RETURN_REFERENCE_FROM_ELEMENT’
  217 |         RETURN_REFERENCE_FROM_ELEMENT(back)
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:203:92: warning: friend declaration ‘tc::constant<true> tc::fn_linear_back_adl::returns_reference_to_argument(tc::fn_linear_back_adl::fn_linear_back<RangeReturn>)’ declares a non-template function [-Wnon-template-friend]
  203 |                         friend tc::constant<true> returns_reference_to_argument(fn_ ## name); /*mark as returning reference to argument. */ \
      |                                                                                            ^
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:218:9: note: in expansion of macro ‘RETURN_REFERENCE_FROM_ELEMENT’
  218 |         RETURN_REFERENCE_FROM_ELEMENT(linear_back)
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:203:92: warning: friend declaration ‘tc::constant<true> tc::fn_only_adl::returns_reference_to_argument(tc::fn_only_adl::fn_only<RangeReturn>)’ declares a non-template function [-Wnon-template-friend]
  203 |                         friend tc::constant<true> returns_reference_to_argument(fn_ ## name); /*mark as returning reference to argument. */ \
      |                                                                                            ^
/home/andrei/sources/think-cell-library/tc/algorithm/../base/../range/../algorithm/element.h:219:9: note: in expansion of macro ‘RETURN_REFERENCE_FROM_ELEMENT’
  219 |         RETURN_REFERENCE_FROM_ELEMENT(only)
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/home/andrei/sources/think-cell-library/tc/unittest.h:40:98: warning: friend declaration ‘tc::type::no_adl::list<T> tc::no_adl::range_output_t_impl(const tc::no_adl::chunk_range_adaptor<RngChunk, Rng>&)’ declares a non-template function [-Wnon-template-friend]
   40 |                         friend auto range_output_t_impl(chunk_range_adaptor const&) -> tc::type::list<RngChunk>; // declaration only
      |                                                                                                  ^~~~~~~~~~~~~~
In file included from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:11:
/home/andrei/sources/think-cell-library/tc/dense_map.h: In instantiation of ‘constexpr tc::dense_map_adl::dense_map<Key, Value>::dense_map(tc::no_adl::fill_tag_t, Args&& ...) [with Args = {int}; Key = MyEnum_adl::MyEnum; Value = NonCopyNonMoveable]’:
/home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:32:69:   required from here
/home/andrei/sources/think-cell-library/tc/dense_map.h:141:93: error: use of deleted function ‘std::array<NonCopyNonMoveable, 2>::array(std::array<NonCopyNonMoveable, 2>&&)’
  141 |                         : tc_member_init_cast(m_a, tc::fill_tag, tc_move_if_owned(val)...) {}
      |                                                                                             ^
In file included from /home/andrei/sources/think-cell-library/tc/base/explicit_cast_fwd.h:14,
                 from /home/andrei/sources/think-cell-library/tc/base/renew.h:12,
                 from /home/andrei/sources/think-cell-library/tc/base/reference_or_value.h:11,
                 from /home/andrei/sources/think-cell-library/tc/array.h:12,
                 from /home/andrei/sources/think-cell-library/tc/unittest.h:10,
                 from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/usr/include/c++/11/array:95:12: note: ‘std::array<NonCopyNonMoveable, 2>::array(std::array<NonCopyNonMoveable, 2>&&)’ is implicitly deleted because the default definition would be ill-formed:
   95 |     struct array
      |            ^~~~~
/usr/include/c++/11/array:95:12: error: use of deleted function ‘NonCopyNonMoveable::NonCopyNonMoveable(NonCopyNonMoveable&&)’
/home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:25:9: note: declared here
   25 |         NonCopyNonMoveable(NonCopyNonMoveable&&) = delete;
      |         ^~~~~~~~~~~~~~~~~~
In file included from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:11:
/home/andrei/sources/think-cell-library/tc/dense_map.h: In instantiation of ‘constexpr tc::dense_map_adl::dense_map<Key, Value>::dense_map(tc::no_adl::fill_tag_t, Args&& ...) [with Args = {const tc::no_adl::fill_tag_t&, int}; Key = MyEnum_adl::MyEnum; Value = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>]’:
/home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:48:44:   required from here
/home/andrei/sources/think-cell-library/tc/dense_map.h:141:93: error: use of deleted function ‘std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2>::array(std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2>&&)’
  141 |                         : tc_member_init_cast(m_a, tc::fill_tag, tc_move_if_owned(val)...) {}
      |                                                                                             ^
In file included from /home/andrei/sources/think-cell-library/tc/base/explicit_cast_fwd.h:14,
                 from /home/andrei/sources/think-cell-library/tc/base/renew.h:12,
                 from /home/andrei/sources/think-cell-library/tc/base/reference_or_value.h:11,
                 from /home/andrei/sources/think-cell-library/tc/array.h:12,
                 from /home/andrei/sources/think-cell-library/tc/unittest.h:10,
                 from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:10:
/usr/include/c++/11/array:95:12: note: ‘std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2>::array(std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2>&&)’ is implicitly deleted because the default definition would be ill-formed:
   95 |     struct array
      |            ^~~~~
/usr/include/c++/11/array:95:12: error: use of deleted function ‘tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>::dense_map(tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>&&)’
In file included from /home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:11:
/home/andrei/sources/think-cell-library/tc/dense_map.h:112:24: note: ‘tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>::dense_map(tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>&&)’ is implicitly deleted because the default definition would be ill-formed:
  112 |                 struct dense_map {
      |                        ^~~~~~~~~
/home/andrei/sources/think-cell-library/tc/dense_map.h:112:24: error: use of deleted function ‘std::array<NonCopyNonMoveable, 2>::array(std::array<NonCopyNonMoveable, 2>&&)’
/home/andrei/sources/think-cell-library/tc/dense_map.h: In instantiation of ‘constexpr tc::dense_map_adl::dense_map<Key, Value>::dense_map(tc::no_adl::transform_tag_t, tc::dense_map_adl::dense_map<Key, Value>::other_dense_map<Value2>&&, Func) [with Func = dense_map_with_non_moveable_typeUnitTest()::<lambda(int)>; Value2 = int; Key = MyEnum_adl::MyEnum; Value = NonCopyNonMoveable; tc::dense_map_adl::dense_map<Key, Value>::other_dense_map<Value2> = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, int>]’:
/home/andrei/sources/think-cell-library/tc/dense_map.h:208:4:   required from ‘constexpr tc::return_decltype_t<decltype (typename tc::dense_map_adl::dense_map<Key, Value>::transform_result<typename tc::no_adl::transform_value<Func, Value, void>::type, void>::type(tc::transform_tag, tc_move_always((*(tc::dense_map_adl::dense_map<Key, Value>*)this)), move_if_owned<decltype (func), tc::is_id_expression("func")>(func)))> tc::dense_map_adl::dense_map<Key, Value>::transform(Func&&) && [with long unsigned int nDepth = 0; Func = dense_map_with_non_moveable_typeUnitTest()::<lambda(int)>; std::enable_if_t<(0 == nDepth)>* <anonymous> = 0; Key = MyEnum_adl::MyEnum; Value = int; tc::return_decltype_t<decltype (typename tc::dense_map_adl::dense_map<Key, Value>::transform_result<typename tc::no_adl::transform_value<Func, Value, void>::type, void>::type(tc::transform_tag, tc_move_always((*(tc::dense_map_adl::dense_map<Key, Value>*)this)), move_if_owned<decltype (func), tc::is_id_expression("func")>(func)))> = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; decltype (typename tc::dense_map_adl::dense_map<Key, Value>::transform_result<typename tc::no_adl::transform_value<Func, Value, void>::type, void>::type(tc::transform_tag, tc_move_always((*(tc::dense_map_adl::dense_map<Key, Value>*)this)), move_if_owned<decltype (func), tc::is_id_expression("func")>(func))) = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; typename tc::dense_map_adl::dense_map<Key, Value>::transform_result<typename tc::no_adl::transform_value<Func, Value, void>::type, void>::type = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; typename tc::no_adl::transform_value<Func, Value, void>::type = std::decay<NonCopyNonMoveable>::type; decltype (func) = dense_map_with_non_moveable_typeUnitTest()::<lambda(int)>&&]’
/home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:55:92:   required from here
/home/andrei/sources/think-cell-library/tc/dense_map.h:206:26: error: use of deleted function ‘std::array<NonCopyNonMoveable, 2>::array(std::array<NonCopyNonMoveable, 2>&&)’
  206 |                         {}
      |                          ^
/home/andrei/sources/think-cell-library/tc/dense_map.h: In instantiation of ‘constexpr tc::dense_map_adl::dense_map<Key, Value>::dense_map(tc::no_adl::fill_tag_t, Args&& ...) [with Args = {const int}; Key = MyEnum_adl::MyEnum; Value = NonCopyNonMoveable]’:
/home/andrei/sources/think-cell-library/tc/base/explicit_cast_fwd.h:112:3:   required from ‘constexpr std::remove_cv_t<_Tp> tc::explicit_cast(Args&& ...) [with TTarget = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; Args = {const tc::no_adl::fill_tag_t&, const int}; std::remove_cv_t<_Tp> = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>]’
/home/andrei/sources/think-cell-library/tc/array.h:175:50:   required from ‘constexpr std::array<_Tp, _Nm> tc::explicit_convert_std_array_detail::with_fill_tag_impl(tc::type::no_adl::identity<std::array<_Tp, _Nm> >, std::index_sequence<_Idx ...>, Args&& ...) [with T = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; long unsigned int N = 2; long unsigned int ...IndexPack = {0}; Args = {const tc::no_adl::fill_tag_t&, int}; std::index_sequence<_Idx ...> = std::integer_sequence<long unsigned int, 0>]’
/home/andrei/sources/think-cell-library/tc/array.h:205:68:   required from ‘constexpr std::array<_Tp, _Nm> tc::explicit_convert_adl::explicit_convert_impl(tc::explicit_convert_adl::adl_tag_t, tc::type::no_adl::identity<std::array<_Tp, _Nm> >, tc::no_adl::fill_tag_t, Args&& ...) [with T = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>; long unsigned int N = 2; Args = {const tc::no_adl::fill_tag_t&, int}]’
/home/andrei/sources/think-cell-library/tc/base/explicit_cast_fwd.h:104:2:   required from ‘constexpr decltype(auto) tc::explicit_convert(Args&& ...) [with Args = {tc::type::no_adl::identity<std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2> >, const tc::no_adl::fill_tag_t&, const tc::no_adl::fill_tag_t&, int}]’
/home/andrei/sources/think-cell-library/tc/base/explicit_cast_fwd.h:108:3:   required by substitution of ‘template<class TTarget, class ... Args, std::enable_if_t<(! safely_constructible_from<typename std::remove_cv< <template-parameter-1-1> >::type, Args&& ...>)>* <anonymous> > constexpr tc::return_decltype_t<decltype (tc::explicit_convert(tc::type::no_adl::identity<typename std::remove_cv< <template-parameter-1-1> >::type>(), (move_if_owned<decltype(tc::explicit_cast::args), is_id_expression()("args")>)(tc::explicit_cast::args)...))> tc::explicit_cast(Args&& ...) [with TTarget = std::array<tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>, 2>; Args = {const tc::no_adl::fill_tag_t&, const tc::no_adl::fill_tag_t&, int}; std::enable_if_t<(! safely_constructible_from<typename std::remove_cv< <template-parameter-1-1> >::type, Args&& ...>)>* <anonymous> = 0]’
/home/andrei/sources/think-cell-library/tc/dense_map.h:141:6:   required from ‘constexpr tc::dense_map_adl::dense_map<Key, Value>::dense_map(tc::no_adl::fill_tag_t, Args&& ...) [with Args = {const tc::no_adl::fill_tag_t&, int}; Key = MyEnum_adl::MyEnum; Value = tc::dense_map_adl::dense_map<MyEnum_adl::MyEnum, NonCopyNonMoveable>]’
/home/andrei/sources/think-cell-library/tc/dense_map.t.cpp:48:44:   required from here
/home/andrei/sources/think-cell-library/tc/dense_map.h:141:93: error: use of deleted function ‘std::array<NonCopyNonMoveable, 2>::array(std::array<NonCopyNonMoveable, 2>&&)’
  141 |                         : tc_member_init_cast(m_a, tc::fill_tag, tc_move_if_owned(val)...) {}
      |                                                                                             ^
gmake[2]: *** [CMakeFiles/unit_test.dir/build.make:454: CMakeFiles/unit_test.dir/tc/dense_map.t.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:869: CMakeFiles/unit_test.dir/all] Error 2
gmake: *** [Makefile:101: all] Error 2
gcc --version
gcc (GCC) 13.2.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.