Skip to content

Commit 2d7c029

Browse files
committed
Fix for gcc 15
* ra/ply.hh (std::formatter<ra::is_array_formattable>): Avoid forming std::formattable/std::formatter of const type. * test/mpdebug.hh (ra::mp::type_name): Use demangler.
1 parent 07824df commit 2d7c029

File tree

4 files changed

+14
-23
lines changed

4 files changed

+14
-23
lines changed

ra/base.hh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#pragma once
1111
#include "tuples.hh"
1212
#include <array>
13+
#include <format>
1314
#include <ranges>
1415
#include <vector>
1516
#include <iosfwd> // for format, ss.
@@ -269,8 +270,8 @@ operator<<(std::ostream & o, std::source_location const & loc)
269270
return o << loc.file_name() << ":" << loc.line() << "," << loc.column();
270271
}
271272

272-
template <class A> requires (std::formattable<A, char>) constexpr void print1(auto & o, A && a) { std::print(o, "{}", RA_FWD(a)); }
273-
template <class A> requires (!std::formattable<A, char>) constexpr void print1(auto & o, A && a) { o << RA_FWD(a); }
273+
constexpr void print1(auto & o, std::formattable<char> auto && a) { std::print(o, "{}", RA_FWD(a)); }
274+
constexpr void print1(auto & o, auto && a) { o << RA_FWD(a); }
274275
constexpr auto & print(auto & o, auto && ... a) { (print1(o, RA_FWD(a)), ...); return o; }
275276
constexpr std::string format(auto && ... a) { std::ostringstream o; print(o, RA_FWD(a) ...); return o.str(); }
276277
constexpr std::string const & format(std::string const & s) { return s; }

ra/expr.hh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -356,23 +356,23 @@ template <bool checkp, IteratorConcept ... P, int ... I>
356356
struct Match<checkp, std::tuple<P ...>, mp::int_list<I ...>>
357357
{
358358
std::tuple<P ...> t;
359-
constexpr static rank_t rs = [] { rank_t r=BAD; return ((r=choose_rank(ra::rank_s<P>(), r)), ...); }();
359+
constexpr static rank_t rs = [] { rank_t r=BAD; return ((r=choose_rank(rank_s<P>(), r)), ...); }();
360360

361361
// 0: fail, 1: rt, 2: pass
362362
consteval static int
363363
check_s()
364364
{
365-
if constexpr (sizeof...(P)<2 || sizeof...(P)==1+(bool(0==ra::rank_s<P>()) + ...)) {
365+
if constexpr (sizeof...(P)<2 || sizeof...(P)==1+(bool(0==rank_s<P>()) + ...)) {
366366
return 2;
367367
} else if constexpr (ANY!=rs) {
368368
bool tbc = false;
369369
for (int k=0; k<rs; ++k) {
370370
dim_t ls = len_s(k);
371-
if (((k<ra::rank_s<P>() && ls!=choose_len(std::decay_t<P>::len_s(k), ls)) || ...)) {
371+
if (((k<rank_s<P>() && ls!=choose_len(std::decay_t<P>::len_s(k), ls)) || ...)) {
372372
return 0;
373373
}
374-
int anyk = ((k<ra::rank_s<P>() && (ANY==std::decay_t<P>::len_s(k))) + ...);
375-
int fixk = ((k<ra::rank_s<P>() && (0<=std::decay_t<P>::len_s(k))) + ...);
374+
int anyk = ((k<rank_s<P>() && (ANY==std::decay_t<P>::len_s(k))) + ...);
375+
int fixk = ((k<rank_s<P>() && (0<=std::decay_t<P>::len_s(k))) + ...);
376376
tbc = tbc || (anyk>0 && anyk+fixk>1);
377377
}
378378
return tbc ? 1 : 2;
@@ -423,7 +423,7 @@ struct Match<checkp, std::tuple<P ...>, mp::int_list<I ...>>
423423
len_s(int k)
424424
{
425425
auto f = [&k]<class A>(dim_t s) {
426-
constexpr rank_t ar = ra::rank_s<A>();
426+
constexpr rank_t ar = rank_s<A>();
427427
return (ar<0 || k<ar) ? choose_len(A::len_s(k), s) : s;
428428
};
429429
dim_t s = BAD; (void)(((s = f.template operator()<std::decay_t<P>>(s)) < 0) && ...);

ra/ply.hh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
#pragma once
1515
#include "expr.hh"
16-
#include <format>
1716

1817
namespace ra {
1918

@@ -353,8 +352,8 @@ template <ra::is_array_formattable A>
353352
struct std::formatter<A>
354353
{
355354
ra::format_t fmt;
356-
std::conditional_t<std::formattable<ra::value_t<A>, char>,
357-
std::formatter<ra::value_t<A>>, ra::ostream_formatter> under;
355+
std::conditional_t<std::formattable<ra::ncvalue_t<A>, char>,
356+
std::formatter<ra::ncvalue_t<A>>, ra::ostream_formatter> under;
358357

359358
constexpr auto
360359
parse(auto & ctx)

test/mpdebug.hh

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#pragma once
1111
#include "ra/tuples.hh"
1212
#include <typeinfo>
13-
#include <sys/types.h>
13+
#include <cxxabi.h>
1414

1515
namespace ra::mp {
1616

@@ -41,17 +41,8 @@ template <class T>
4141
std::string
4242
type_name()
4343
{
44-
using TR = std::remove_cvref_t<T>;
45-
std::string r = typeid(TR).name();
46-
if (std::is_const_v<TR>)
47-
r += " const";
48-
if (std::is_volatile_v<TR>)
49-
r += " volatile";
50-
if (std::is_lvalue_reference_v<T>)
51-
r += " &";
52-
else if (std::is_rvalue_reference_v<T>)
53-
r += " &&";
54-
return r;
44+
int status;
45+
return abi::__cxa_demangle(typeid(T).name(), NULL, NULL, &status);
5546
}
5647

5748
template <class A, int ... I> struct check_idx { constexpr static bool value = false; };

0 commit comments

Comments
 (0)