pputl  0.2.1
pputl Preprocessor Utilities
rest.h
Go to the documentation of this file.
1 #ifndef PPUTL_REST_H_INCLUDED
2 #define PPUTL_REST_H_INCLUDED
3 #///// c++20
4 #///////////////////////////////////////////////////////////////////////////////
5 #/// @brief \link PPUTL_REST PPUTL_REST\endlink -
6 #/// return all passed arguments except for the first
7 #/// @file
8 #// __ ___
9 #// /\ \__/\_ \
10 #// _____ _____ __ __\ \ ,_\//\ \
11 #// /\ '__`\/\ '__`\/\ \/\ \\ \ \/ \ \ \
12 #// \ \ \_\ \ \ \_\ \ \ \_\ \\ \ \_ \_\ \_
13 #// \ \ ,__/\ \ ,__/\ \____/ \ \__\/\____\
14 #// \ \ \ \ \ \ \/___/ \/__/\/____/
15 #// \/_/ \/_/
16 #//
17 #// pputl Preprocessor Utilities
18 #// Copyright (C) 2020 Justin Collier <m@jpcx.dev>
19 #//
20 #// This program is free software: you can redistribute it and/or modify
21 #// it under the terms of the GNU General Public License as published by
22 #// the Free Software Foundation, either version 3 of the License, or
23 #// (at your option) any later version.
24 #//
25 #// This program is distributed in the hope that it will be useful,
26 #// but WITHOUT ANY WARRANTY; without even the internalied warranty of
27 #// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 #// GNU General Public License for more details.
29 #// //
30 #// You should have received a copy of the GNU General Public License ///
31 #// along with this program. If not, see <https://www.gnu.org/licenses/>. ////
32 #///////////////////////////////////////////////////////////////////////////////
33 #
34 #include <pputl/cat.h>
35 #
36 #/// return all passed arguments except for the first
37 #///
38 #/// @ingroup pputl
39 #/// @anchor PPUTL_REST
40 #/// @param ... args
41 #/// @returns all args but the first
42 #/// @code
43 #/// #include <pputl/rest.h>
44 #/// PPUTL_REST(); // expands to nothing
45 #/// PPUTL_REST(a); // expands to nothing
46 #/// PPUTL_REST(a, b); // b
47 #/// PPUTL_REST(a, b, c); // b, c
48 #/// @endcode
49 #define PPUTL_REST(...) PPUTL_DETAIL_REST_X(__VA_ARGS__)
50 #
51 #define PPUTL_DETAIL_REST_X(...)
52  PPUTL_DETAIL_REST_CHOOSER(__VA_OPT__(, ) SIZEY, EMPTY)(__VA_ARGS__)
53 #define PPUTL_DETAIL_REST_CHOOSER(_, choice, ...)
54  PPUTL_CAT(PPUTL_DETAIL_REST_, choice)
55 #define PPUTL_DETAIL_REST_EMPTY()
56 #define PPUTL_DETAIL_REST_SIZEY(_1, ...) __VA_ARGS__
57 #
58 #endif
PPUTL_DETAIL_REST_X
#define PPUTL_DETAIL_REST_X(...)
Definition: rest.h:51
PPUTL_CAT
#define PPUTL_CAT(...)
Definition: cat.h:40