dnbaker / dashing2

Dashing 2 is a fast toolkit for k-mer and minimizer encoding, sketching, comparison, and indexing.
MIT License
62 stars 7 forks source link

compilation fails under gcc > 12 #75

Open joelb123 opened 1 year ago

joelb123 commented 1 year ago

Works under gcc-12.3.1_p20230623 First failure under gcc-13.1.1_p20230527 as below:

x86_64-pc-linux-gnu-g++ -IlibBigWig -Ibonsai/include -Ibonsai -Ibonsai/hll -Ibonsai/hll/include -Ibonsai -I. -Isrc -Ifmt/include -O3 -march=native -fopenmp -pipe -DD2_CACHE_SIZE=4194304 -std=c++20 -Wall -Wextra -Wno-unused-function -Wno-char-subscripts -pedantic -Wno-array-bounds src/emitrect.cpp -c -o src/emitrect.o -DNOCURL -DDASHING2_VERSION=\"v2.1.16-1-gbf82\" -DFMT_HEADER_ONLY -DNDEBUG -flto -O3 src/emitrect.cpp: In function ‘void dashing2::print_tabs(size_t, std::back_insert_iterator<fmt::v8::basic_memory_buffer >&)’: src/emitrect.cpp:51:28: error: call of overloaded ‘format_to(std::back_insert_iterator<fmt::v8::basic_memory_buffer >&, const std::string_view&)’ is ambiguous 51 | for(;n > 256; format_to(biof, tabstr), n -= 256); | ~~~^~~~ In file included from fmt/include/fmt/format.h:44, from src/emitrect.cpp:2: fmt/include/fmt/core.h:3073:17: note: candidate: ‘OutputIt fmt::v8::format_to(OutputIt, format_string<T ...>, T&& ...) [with OutputIt = std::back_insert_iterator<basic_memory_buffer >; T = {}; typename std::enable_if<detail::is_output_iterator<OutputIt, char>::value, int>::type = 0; format_string<T ...> = basic_format_string]’ 3073 | FMT_INLINE auto format_to(OutputIt out, format_string<T...> fmt, T&&... args) | ^~~~~ In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/chrono_io.h:39, from /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/chrono:3330, from bonsai/include/bonsai/util.h:4, from bonsai/include/bonsai/kmerutil.h:7, from bonsai/include/bonsai/entropy.h:3, from bonsai/include/bonsai/encoder.h:10, from src/d2.h:11, from src/cmp_main.h:3, from src/emitrect.cpp:1: /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/format:3745:5: note: candidate: ‘_Out std::format_to(_Out, format_string<_Args ...>, _Args&& ...) [with _Out = back_insert_iterator<fmt::v8::basic_memory_buffer >; _Args = {}; format_string<_Args ...> = basic_format_string]’ 3745 | format_to(_Out out, format_string<_Args...> fmt, _Args&&... args) | ^~~~~ src/emitrect.cpp:53:14: error: call of overloaded ‘format_to(std::back_insert_iterator<fmt::v8::basic_memory_buffer >&, const char [3], const std::basic_string_view&)’ is ambiguous 53 | format_to(biof, "{}", substr); | ~~~^~~~~~ fmt/include/fmt/core.h:3073:17: note: candidate: ‘OutputIt fmt::v8::format_to(OutputIt, format_string<T ...>, T&& ...) [with OutputIt = std::back_insert_iterator<basic_memory_buffer >; T = {const std::basic_string_view<char, std::char_traits >&}; typename std::enable_if<detail::is_output_iterator<OutputIt, char>::value, int>::type = 0; format_string<T ...> = basic_format_string<char, const std::basic_string_view<char, std::char_traits >&>]’ 3073 | FMT_INLINE auto format_to(OutputIt out, format_string<T...> fmt, T&&... args) | ^~~~~ /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/format:3745:5: note: candidate: ‘_Out std::format_to(_Out, format_string<_Args ...>, _Args&& ...) [with _Out = back_insert_iterator<fmt::v8::basic_memory_buffer >; _Args = {const basic_string_view<char, char_traits >&}; format_string<_Args ...> = basic_format_string<char, const basic_string_view<char, char_traits >&>]’ 3745 | format_to(_Out out, format_string<_Args...> fmt, _Args&&... __args) | ^~~~~ src/emitrect.cpp: In function ‘void dashing2::emit_rectangular(const Dashing2DistOptions&, const SketchingResult&)’: src/emitrect.cpp:351:30: error: call of overloaded ‘format_to(std::back_insert_iterator<fmt::v8::basic_memory_buffer >&, const char [3], std::string&)’ is ambiguous 351 | format_to(biof, "{}", fn); | ~~~^~~~~~ fmt/include/fmt/core.h:3073:17: note: candidate: ‘OutputIt fmt::v8::format_to(OutputIt, format_string<T ...>, T&& ...) [with OutputIt = std::back_insert_iterator<basic_memory_buffer >; T = {std::cxx11::basic_string<char, std::char_traits, std::allocator >&}; typename std::enable_if<detail::is_output_iterator<OutputIt, char>::value, int>::type = 0; format_string<T ...> = basic_format_string<char, std::cxx11::basic_string<char, std::char_traits, std::allocator >&>]’ 3073 | FMT_INLINE auto format_to(OutputIt out, format_string<T...> fmt, T&&... args) | ^~~~~ /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/format:3745:5: note: candidate: ‘_Out std::format_to(_Out, format_string<_Args ...>, _Args&& ...) [with _Out = back_insert_iterator<fmt::v8::basic_memory_buffer >; _Args = {cxx11::basic_string<char, char_traits, allocator >&}; format_string<_Args ...> = basic_format_string<char, cxx11::basic_string<char, char_traits, allocator >&>]’ 3745 | format_to(_Out out, format_string<_Args...> __fmt, _Args&&... __args) | ^~~~~ make: *** [Makefile:117: src/emitrect.o] Error 1

dnbaker commented 1 year ago

Hi Joel,

Thanks for this issue! I was able to reproduce it with gcc-13, and it was a quick fix. I've merged it in here.

Happy to help with any more issues.

Best,

Daniel