-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Description
The following fails to compile:
#include "perf"
int main() { perf::profiler local_profiler{perf::stat::tsc}; }
With error message (clang 21):
main.cpp:2:29: error: no viable constructor or deduction guide for
deduction of template arguments of 'perf::profiler'
2 | int main() { perf::profiler local_profiler{perf::stat::tsc}; }
| ^
./perf.hpp:3357:10: note: candidate template ignored: could not match
'profiler' against 'perf::fixed_named'
3357 | struct profiler {
| ^
./perf.hpp:3357:10: note: implicit deduction guide declared as 'template
<class ...TProfilers> requires ((profiler_like<TProfilers> && requires
(TProfilers profilers) { profilers[]; }) && ...) profiler(profiler<TProfilers...>) ->
profiler<TProfilers...>'
./perf.hpp:3358:24: note: candidate template ignored: constraints not
satisfied [with TProfilers = <const fixed_named<"stat.tsc[ns]", struct rdtsc>>]
3358 | constexpr explicit profiler(TProfilers&... profilers)
| ^
./perf.hpp:3355:16: note: because 'const
perf::fixed_named<basic_fixed_string<char, 13UL>{"stat.tsc[ns]"}, perf::stat::rdtsc>'
does not satisfy 'profiler_like'
3355 | requires ((profiler_like<TProfilers> and
| ^
./perf.hpp:3350:5: note: because 't.start()' would be invalid: 'this'
argument to member function 'start' has type 'const
perf::fixed_named<basic_fixed_string<char, 13UL>{"stat.tsc[ns]"}, perf::stat::rdtsc>',
but function is not marked const
3350 | t.start();
| ^
./perf.hpp:3356:48: note: and 'profilers[]' would be invalid: type 'const
perf::fixed_named<basic_fixed_string<char, 13UL>{"stat.tsc[ns]"}, perf::stat::rdtsc>'
does not provide a subscript operator
3356 | requires (TProfilers profilers) { profilers[]; }) and ...)
| ^
./perf.hpp:3358:24: note: implicit deduction guide declared as 'template
<class ...TProfilers> requires ((profiler_like<TProfilers> && requires
(TProfilers profilers) { profilers[]; }) && ...) explicit profiler(TProfilers
&...profilers) -> profiler<TProfilers...> requires ((profiler_like<TProfilers> &&
requires (TProfilers profilers) { profilers[]; }) && ...)'
3358 | constexpr explicit profiler(TProfilers&... profilers)
| ^
1 error generated.
Mostly because operator[] isn't defined for tsc and also because start/stop isn't const. With mutable and const, I can get around the error of start/stop not being const, but I'm not sure what to do for operator[].
Metadata
Metadata
Assignees
Labels
No labels