summaryrefslogtreecommitdiff
path: root/src/ranges.cc
AgeCommit message (Collapse)Author
2022-04-28Fix compilation due to failing template deduction for aggregatesJohannes Altmanninger
gcc 11.2.0 compiles us just fine but clang 13.0.1 fails with this error clang++ -DKAK_DEBUG -O0 -pedantic -std=c++2a -g -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-address -frelaxed-template-template-args -Wno-ambiguous-reversed-operator -MD -MP -MF .ranges.debug.d -c -o .ranges.debug.o ranges.cc ranges.cc:30:17: error: no viable constructor or deduction guide for deduction of template arguments of 'Array' check_equal(Array{{""_sv, "abc"_sv, ""_sv, "def"_sv, ""_sv}} | flatten(), "abcdef"_sv); ^ ./constexpr_utils.hh:14:8: note: candidate template ignored: couldn't infer template argument 'T' struct Array ^ ./constexpr_utils.hh:14:8: note: candidate function template not viable: requires 0 arguments, but 1 was provided 1 error generated. The same error can be reproduced with this C++ input template<typename T, int N> struct Array { T m_data[N]; }; void test() { (void)Array{{1, 2}}; } Since "Array" has no constructor, the compiler uses aggregate initialization. Only recent g++ seems to be smart enough to deduce template arguments in this case. Help other compilers by adding a deduction guide. The deduction guide needs to count the array elements to infer the array size, hence we need to remove braces. Happily, this is allowed and it's also what std::array does. Closes #4597
2022-04-25Introduce a flatten range adapter and use it in execute_keys_cmdMaxime Coste
This avoids allocating a KeyList vector in which to flatten all the different arguments and simplifies the client logic.
2019-01-23Change pipe diffing to work linewiseMaxime Coste
This should greatly improve performances as we only need to diff lines instead of individual characters. Closes #2678 Fixes #2037
2017-12-07Ranges: add unit test and fix corner case in split viewMaxime Coste