Skip to main content
18 votes
Accepted

Min function accepting varying number of arguments in C++17

template <typename Less, typename T, typename... Ts> constexpr const T& min(Less less, const T& a, const T& b, const Ts&... rems) { This ...
Snowhawk's user avatar
  • 6,265
14 votes
Accepted

Implementation of std::any

Your implementation is excellent! I can hardly find any problems. I was amazed how simple a conforming implementation of any can be. And I wholeheartedly agree with ...
L. F.'s user avatar
  • 9,605
12 votes

Min function accepting varying number of arguments in C++17

This looks nice! Two issues I see here, When compiling your template with clang, it refuses the if constexpr dispatch for every ...
lubgr's user avatar
  • 956
11 votes
Accepted

C++17 : Typelist manipulation

Overall, your code looks very good. No need to overload for empty template parameter packs A typename... parameter pack also matches zero elements, so the following ...
G. Sliepen's user avatar
  • 61.7k
10 votes

The real std::apply

I think there are two flaws with this function; the first is in conception, and the second is in implementation. The conception problem is this: What does ...
ruds's user avatar
  • 3,321
10 votes

FlagSet with C++ templates

IndexOf can probably be a nested type of FlagSet, unless you intend for that to be part of the public interface. ...
indi's user avatar
  • 13.7k
9 votes

Min function accepting varying number of arguments in C++17

It works well, according to my simple test program: #include <functional> int main() { return min(std::less<int>(), 2, 0, 3); } I suggest that when ...
Toby Speight's user avatar
  • 81.7k
8 votes
Accepted

Partial application in C++

Looks like you are trying to re-invent std::bind. ...
Loki Astari's user avatar
  • 96.6k
8 votes
Accepted

`printf` improvement with C++ variadic templates

General design Currently, your function is defined to have "undefined behavior" if the number of arguments is wrong. This is sub-optimal. Checking is trivial in this case, so report the problem in ...
L. F.'s user avatar
  • 9,605
8 votes

c++17 compatible std::bind_front alternative

Are there some cases in std::bind_front that I missed? There are several significant differences between std::bind_front's ...
Barry's user avatar
  • 18.4k
8 votes
Accepted

How to simplify this C++ CRTP example?

Avoid special cases A lot of problems come from the fact that you have slightly different ways to construct a 2D point and to get its elements than you have for an arbitrary dimensional point. You ...
G. Sliepen's user avatar
  • 61.7k
8 votes
Accepted

Generic test case templates

C++ 17 Why limit yourself to C functions? DynamicTest(OutputType (*testfunc)(InputType), OutputType (*trustedfunc)(InputType)) I would declare this as: ...
Loki Astari's user avatar
  • 96.6k
8 votes
Accepted

De-/Serialization of structs representing TCP messages

Your code produces no memory leaks since you're not manually allocating and deleting memory. Include all headers Always include all the headers. In this case, you need ...
Rish's user avatar
  • 2,426
7 votes
Accepted

Generic matrix type in C++

Use one vector instead of two vectors You can improve performance by using one vector instead of two vectors; you can calculate the 2nd dimension using a little math. This is actually how primitive ...
user2296177's user avatar
  • 3,553
7 votes

The perfect function alias

Is there a situation where the compiler will not optimize away the wrapper because the wrapper and the original function have different semantics? Yes to the first part and no to the second. Any ...
Rakete1111's user avatar
  • 2,572
7 votes
Accepted

Meta functions for sequences of exponents of 2

Certainly your definitions of printing_type and print could be shortened. You're currently doing ...
Quuxplusone's user avatar
  • 19.4k
7 votes

De-/Serialization of structs representing TCP messages

Here are some things that may help you improve your program. Use all required #includes Part of the interface is the #include ...
Edward's user avatar
  • 66.6k
7 votes
Accepted

Object to ignore unused function output parameters

What's wrong with just writing: int main() { X ignore; foo(ignore); return 0; } What benefit is gained by adding a wrapper around the unused argument? ...
JDługosz's user avatar
  • 11.3k
7 votes
Accepted

Member detection within a class

Pre C++20 concepts I know you are using C++20 (as everyone should; C++23 is the current version, and C++26 already has its first major features), but just for completeness I thought I’d give a pre-C++...
indi's user avatar
  • 13.7k
6 votes

Selection sorting a type list (compile-time)

I recommend a naming style that uses CamelCase for template parameters and snake_case (only) for plain old variables and ...
Quuxplusone's user avatar
  • 19.4k
6 votes
Accepted

Selecting function overload based on a type match with return value of passed callable

Higher level overview: Personally I think the architecture has limited use cases. It was quite hard to implement, and even then doesn't match the specification. From what I understood, this is the ...
Incomputable's user avatar
  • 9,589
6 votes
Accepted

Set an order or precedence when calling functions that may or may not exist

Not a full review, just an answer on the SFINAE-mechanisms part: I'd say that your method is perfectly idiomatic. I recommend an approach exactly isomorphic to yours, based on some code I originally ...
Quuxplusone's user avatar
  • 19.4k
6 votes
Accepted

Event handling attempt using some of the c++ 17 features

I'm actually not the right person to properly review your code, since event handling is outside my particular experience, so the overall idea of even having this kind of observer-handler-emitter ...
einpoklum's user avatar
  • 2,035
6 votes
Accepted

Generic implementation of an array view

Constructors The second constructor: ...
Loki Astari's user avatar
  • 96.6k
6 votes
Accepted

An overloaded random number function template using modern C++

The constructor of uniform_int_distribution has default arguments: ...
Toby Speight's user avatar
  • 81.7k
6 votes
Accepted

Transaction manager, supporting undo/redo, using C++ templates

If you want to implement the command manager pattern, you can do something so very much simpler that I don't really understand what you're aiming for. As you know, the design pattern has a ...
papagaga's user avatar
  • 5,767
6 votes
Accepted

Finding the common iterator category in C++

If you have a typelist of iterator tag types, then std::common_type will find the common base type. ...
Snowhawk's user avatar
  • 6,265
6 votes
Accepted

C++17 <span> implementation

Well, it looks quite nice. But now let's try to find all the corners which can still be improved: I'm not quite sure why you list a few members of each include you added. But, at least it simplifies ...
Deduplicator's user avatar
  • 19.3k
6 votes
Accepted

Implementing apply_each for tuple c++

I see two main issues with the design. That you need to use std::ref to operate on the tuples themselves and not their copies. This isn't good. It is used this way ...
ALX23z's user avatar
  • 2,389

Only top scored, non community-wiki answers of a minimum length are eligible