Skip to content

Commit 858e1cf

Browse files
authored
Merge pull request #304 from eseiler/fix/charconv
fix(llvm): charconv on apple
2 parents 983dc3d + d6ce31a commit 858e1cf

4 files changed

Lines changed: 24 additions & 9 deletions

File tree

.clang-format

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,12 @@ IncludeBlocks: Regroup
8686
IncludeCategories:
8787
- Regex: '(<gtest/.*|<benchmark/.*)'
8888
Priority: 1
89+
- Regex: '(<sharg/std/charconv>)'
90+
Priority: 2
91+
SortPriority: 1
8992
- Regex: '(<[[:alnum:]._]+>|<sharg/std/.*>)'
9093
Priority: 2
94+
SortPriority: 2
9195
- Regex: '<sdsl/'
9296
Priority: 3
9397
- Regex: '<sharg/'

include/sharg/std/charconv

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,24 @@
1111
#ifndef SEQAN_STD_CHARCONV_SHIM // to avoid multiple definitions if other seqan modules also implement this
1212
#define SEQAN_STD_CHARCONV_SHIM
1313

14+
#include <version> // From C++20 onwards, all feature macros should be defined here.
15+
16+
// Workaround for llvm marking float charconv as unavailable
17+
#if defined(__APPLE__) && defined(_LIBCPP_VERSION)
18+
# ifdef _LIBCPP___CHARCONV_FROM_CHARS_FLOATING_POINT_H
19+
# warning This file needs to be included before any <charconv> include.
20+
# endif
21+
# if __has_include(<__configuration/availability.h>)
22+
# include <__configuration/availability.h>
23+
# undef _LIBCPP_AVAILABILITY_FROM_CHARS_FLOATING_POINT
24+
# define _LIBCPP_AVAILABILITY_FROM_CHARS_FLOATING_POINT /* nothing */
25+
# undef _LIBCPP_AVAILABILITY_HAS_FROM_CHARS_FLOATING_POINT
26+
# define _LIBCPP_AVAILABILITY_HAS_FROM_CHARS_FLOATING_POINT /* nothing */
27+
# endif
28+
#endif
29+
1430
#include <charconv>
1531
#include <utility> // __cpp_lib_to_chars may be defined here as currently documented.
16-
#include <version> // From C++20 onwards, all feature macros should be defined here.
1732

1833
/*!\defgroup std std
1934
* \ingroup misc

test/unit/std/charconv_float_test.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44

55
#include <gtest/gtest.h>
66

7-
#if __has_include(<charconv>)
87
// make sure that including the std header does not produce any errors
98
// see https://github.com/seqan/seqan3/issues/2352
10-
# include <charconv>
11-
#endif // __has_include(<charconv>)
9+
#include <sharg/std/charconv>
10+
#include <charconv>
1211
#include <cmath>
1312
#include <iostream>
1413
#include <limits>
15-
#include <sharg/std/charconv>
1614

1715
// =============================================================================
1816
// std::from_chars for float, double and long double

test/unit/std/charconv_int_test.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44

55
#include <gtest/gtest.h>
66

7-
#if __has_include(<charconv>)
87
// make sure that including the std header does not produce any errors
98
// see https://github.com/seqan/seqan3/issues/2352
10-
# include <charconv>
11-
#endif // __has_include(<charconv>)
9+
#include <sharg/std/charconv>
10+
#include <charconv>
1211
#include <cmath>
1312
#include <iostream>
1413
#include <limits>
15-
#include <sharg/std/charconv>
1614

1715
// =============================================================================
1816
// std::from_chars for integral types

0 commit comments

Comments
 (0)