ccutl  0.3.2
a C++ utilities library focused on flexibility and expressibility
Classes | Macros | Typedefs | Functions | Variables
ccutl.h File Reference

PPUTL_TUPLE_ARGS - returns tuple elements as args More...

#include <algorithm>
#include <compare>
#include <concepts>
#include <cstdint>
#include <limits>
#include <string_view>
#include <type_traits>
#include <utility>

Go to the source code of this file.

Classes

struct  CCUTL_NAMESPACE::detail::targ::impl< targ, targ, First, Rest... >
 end of iteration; type represents first type More...
 
struct  CCUTL_NAMESPACE::detail::targ::impl< targ, i, First, Rest... >
 iterates until i reaches target More...
 
struct  CCUTL_NAMESPACE::detail::type_pack::from< Template, Template< Rs... > >
 pulls template types from specialzied template More...
 
struct  CCUTL_NAMESPACE::detail::type_pack::concat< ctl::type_pack< Us... > >
 removes the last template type from Ts... More...
 
struct  CCUTL_NAMESPACE::type_pack< Ts >
 
struct  CCUTL_NAMESPACE::detail::value_pack::from< Template, Template< rs... > >
 pulls nontype template values from specialzied template More...
 
struct  CCUTL_NAMESPACE::detail::value_pack::concat< ctl::value_pack< rs... > >
 removes the last nontype template value from vs... More...
 
struct  CCUTL_NAMESPACE::value_pack< values >
 

Macros

#define PPUTL_TUPLE_ARGS_H_INCLUDED
 
#define PPUTL_TUPLE_ARGS(tup)   PPUTL_TUPLE_ARGS_RETURN tup
 
#define PPUTL_TUPLE_ARGS_RETURN(...)   __VA_ARGS__
 
#define PPUTL_NARGS_H_INCLUDED
 
#define PPUTL_NARGS(...)   PPUTL_DETAIL_NARGS_X(__VA_ARGS__)
 
#define PPUTL_DETAIL_NARGS_X(...)
 
#define PPUTL_DETAIL_NARGS_CHOOSER( e255, e254, e253, e252, e251, e250, e249, e248, e247, e246, e245, e244, e243, e242, e241, e240, e239, e238, e237, e236, e235, e234, e233, e232, e231, e230, e229, e228, e227, e226, e225, e224, e223, e222, e221, e220, e219, e218, e217, e216, e215, e214, e213, e212, e211, e210, e209, e208, e207, e206, e205, e204, e203, e202, e201, e200, e199, e198, e197, e196, e195, e194, e193, e192, e191, e190, e189, e188, e187, e186, e185, e184, e183, e182, e181, e180, e179, e178, e177, e176, e175, e174, e173, e172, e171, e170, e169, e168, e167, e166, e165, e164, e163, e162, e161, e160, e159, e158, e157, e156, e155, e154, e153, e152, e151, e150, e149, e148, e147, e146, e145, e144, e143, e142, e141, e140, e139, e138, e137, e136, e135, e134, e133, e132, e131, e130, e129, e128, e127, e126, e125, e124, e123, e122, e121, e120, e119, e118, e117, e116, e115, e114, e113, e112, e111, e110, e109, e108, e107, e106, e105, e104, e103, e102, e101, e100, e99, e98, e97, e96, e95, e94, e93, e92, e91, e90, e89, e88, e87, e86, e85, e84, e83, e82, e81, e80, e79, e78, e77, e76, e75, e74, e73, e72, e71, e70, e69, e68, e67, e66, e65, e64, e63, e62, e61, e60, e59, e58, e57, e56, e55, e54, e53, e52, e51, e50, e49, e48, e47, e46, e45, e44, e43, e42, e41, e40, e39, e38, e37, e36, e35, e34, e33, e32, e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255, size, ...)    size
 
#define PPUTL_DETAIL_NARGS_E_TOOMANYARGS
 
#define PPUTL_CAT_H_INCLUDED
 
#define PPUTL_CAT(...)   PPUTL_DETAIL_CAT_X(__VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_X(...)
 
#define PPUTL_DETAIL_CAT_CHOOSER(nargs)   PPUTL_DETAIL_CAT_CHOOSER_X(nargs)
 
#define PPUTL_DETAIL_CAT_CHOOSER_X(nargs)   PPUTL_DETAIL_CAT_##nargs
 
#define PPUTL_DETAIL_CAT_0()
 
#define PPUTL_DETAIL_CAT_1(a)   a
 
#define PPUTL_DETAIL_CAT_2(a, b)   a##b
 
#define PPUTL_DETAIL_CAT_3(a, b, ...)   PPUTL_DETAIL_CAT_2(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_4(a, b, ...)   PPUTL_DETAIL_CAT_3(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_5(a, b, ...)   PPUTL_DETAIL_CAT_4(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_6(a, b, ...)   PPUTL_DETAIL_CAT_5(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_7(a, b, ...)   PPUTL_DETAIL_CAT_6(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_8(a, b, ...)   PPUTL_DETAIL_CAT_7(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_9(a, b, ...)   PPUTL_DETAIL_CAT_8(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_10(a, b, ...)   PPUTL_DETAIL_CAT_9(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_11(a, b, ...)   PPUTL_DETAIL_CAT_10(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_12(a, b, ...)   PPUTL_DETAIL_CAT_11(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_13(a, b, ...)   PPUTL_DETAIL_CAT_12(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_14(a, b, ...)   PPUTL_DETAIL_CAT_13(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_15(a, b, ...)   PPUTL_DETAIL_CAT_14(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_16(a, b, ...)   PPUTL_DETAIL_CAT_15(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_17(a, b, ...)   PPUTL_DETAIL_CAT_16(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_18(a, b, ...)   PPUTL_DETAIL_CAT_17(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_19(a, b, ...)   PPUTL_DETAIL_CAT_18(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_20(a, b, ...)   PPUTL_DETAIL_CAT_19(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_21(a, b, ...)   PPUTL_DETAIL_CAT_20(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_22(a, b, ...)   PPUTL_DETAIL_CAT_21(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_23(a, b, ...)   PPUTL_DETAIL_CAT_22(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_24(a, b, ...)   PPUTL_DETAIL_CAT_23(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_25(a, b, ...)   PPUTL_DETAIL_CAT_24(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_26(a, b, ...)   PPUTL_DETAIL_CAT_25(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_27(a, b, ...)   PPUTL_DETAIL_CAT_26(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_28(a, b, ...)   PPUTL_DETAIL_CAT_27(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_29(a, b, ...)   PPUTL_DETAIL_CAT_28(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_30(a, b, ...)   PPUTL_DETAIL_CAT_29(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_31(a, b, ...)   PPUTL_DETAIL_CAT_30(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_32(a, b, ...)   PPUTL_DETAIL_CAT_31(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_33(a, b, ...)   PPUTL_DETAIL_CAT_32(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_34(a, b, ...)   PPUTL_DETAIL_CAT_33(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_35(a, b, ...)   PPUTL_DETAIL_CAT_34(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_36(a, b, ...)   PPUTL_DETAIL_CAT_35(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_37(a, b, ...)   PPUTL_DETAIL_CAT_36(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_38(a, b, ...)   PPUTL_DETAIL_CAT_37(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_39(a, b, ...)   PPUTL_DETAIL_CAT_38(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_40(a, b, ...)   PPUTL_DETAIL_CAT_39(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_41(a, b, ...)   PPUTL_DETAIL_CAT_40(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_42(a, b, ...)   PPUTL_DETAIL_CAT_41(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_43(a, b, ...)   PPUTL_DETAIL_CAT_42(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_44(a, b, ...)   PPUTL_DETAIL_CAT_43(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_45(a, b, ...)   PPUTL_DETAIL_CAT_44(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_46(a, b, ...)   PPUTL_DETAIL_CAT_45(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_47(a, b, ...)   PPUTL_DETAIL_CAT_46(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_48(a, b, ...)   PPUTL_DETAIL_CAT_47(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_49(a, b, ...)   PPUTL_DETAIL_CAT_48(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_50(a, b, ...)   PPUTL_DETAIL_CAT_49(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_51(a, b, ...)   PPUTL_DETAIL_CAT_50(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_52(a, b, ...)   PPUTL_DETAIL_CAT_51(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_53(a, b, ...)   PPUTL_DETAIL_CAT_52(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_54(a, b, ...)   PPUTL_DETAIL_CAT_53(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_55(a, b, ...)   PPUTL_DETAIL_CAT_54(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_56(a, b, ...)   PPUTL_DETAIL_CAT_55(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_57(a, b, ...)   PPUTL_DETAIL_CAT_56(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_58(a, b, ...)   PPUTL_DETAIL_CAT_57(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_59(a, b, ...)   PPUTL_DETAIL_CAT_58(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_60(a, b, ...)   PPUTL_DETAIL_CAT_59(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_61(a, b, ...)   PPUTL_DETAIL_CAT_60(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_62(a, b, ...)   PPUTL_DETAIL_CAT_61(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_63(a, b, ...)   PPUTL_DETAIL_CAT_62(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_64(a, b, ...)   PPUTL_DETAIL_CAT_63(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_65(a, b, ...)   PPUTL_DETAIL_CAT_64(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_66(a, b, ...)   PPUTL_DETAIL_CAT_65(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_67(a, b, ...)   PPUTL_DETAIL_CAT_66(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_68(a, b, ...)   PPUTL_DETAIL_CAT_67(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_69(a, b, ...)   PPUTL_DETAIL_CAT_68(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_70(a, b, ...)   PPUTL_DETAIL_CAT_69(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_71(a, b, ...)   PPUTL_DETAIL_CAT_70(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_72(a, b, ...)   PPUTL_DETAIL_CAT_71(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_73(a, b, ...)   PPUTL_DETAIL_CAT_72(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_74(a, b, ...)   PPUTL_DETAIL_CAT_73(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_75(a, b, ...)   PPUTL_DETAIL_CAT_74(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_76(a, b, ...)   PPUTL_DETAIL_CAT_75(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_77(a, b, ...)   PPUTL_DETAIL_CAT_76(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_78(a, b, ...)   PPUTL_DETAIL_CAT_77(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_79(a, b, ...)   PPUTL_DETAIL_CAT_78(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_80(a, b, ...)   PPUTL_DETAIL_CAT_79(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_81(a, b, ...)   PPUTL_DETAIL_CAT_80(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_82(a, b, ...)   PPUTL_DETAIL_CAT_81(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_83(a, b, ...)   PPUTL_DETAIL_CAT_82(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_84(a, b, ...)   PPUTL_DETAIL_CAT_83(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_85(a, b, ...)   PPUTL_DETAIL_CAT_84(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_86(a, b, ...)   PPUTL_DETAIL_CAT_85(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_87(a, b, ...)   PPUTL_DETAIL_CAT_86(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_88(a, b, ...)   PPUTL_DETAIL_CAT_87(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_89(a, b, ...)   PPUTL_DETAIL_CAT_88(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_90(a, b, ...)   PPUTL_DETAIL_CAT_89(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_91(a, b, ...)   PPUTL_DETAIL_CAT_90(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_92(a, b, ...)   PPUTL_DETAIL_CAT_91(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_93(a, b, ...)   PPUTL_DETAIL_CAT_92(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_94(a, b, ...)   PPUTL_DETAIL_CAT_93(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_95(a, b, ...)   PPUTL_DETAIL_CAT_94(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_96(a, b, ...)   PPUTL_DETAIL_CAT_95(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_97(a, b, ...)   PPUTL_DETAIL_CAT_96(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_98(a, b, ...)   PPUTL_DETAIL_CAT_97(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_99(a, b, ...)   PPUTL_DETAIL_CAT_98(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_100(a, b, ...)   PPUTL_DETAIL_CAT_99(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_101(a, b, ...)   PPUTL_DETAIL_CAT_100(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_102(a, b, ...)   PPUTL_DETAIL_CAT_101(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_103(a, b, ...)   PPUTL_DETAIL_CAT_102(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_104(a, b, ...)   PPUTL_DETAIL_CAT_103(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_105(a, b, ...)   PPUTL_DETAIL_CAT_104(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_106(a, b, ...)   PPUTL_DETAIL_CAT_105(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_107(a, b, ...)   PPUTL_DETAIL_CAT_106(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_108(a, b, ...)   PPUTL_DETAIL_CAT_107(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_109(a, b, ...)   PPUTL_DETAIL_CAT_108(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_110(a, b, ...)   PPUTL_DETAIL_CAT_109(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_111(a, b, ...)   PPUTL_DETAIL_CAT_110(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_112(a, b, ...)   PPUTL_DETAIL_CAT_111(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_113(a, b, ...)   PPUTL_DETAIL_CAT_112(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_114(a, b, ...)   PPUTL_DETAIL_CAT_113(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_115(a, b, ...)   PPUTL_DETAIL_CAT_114(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_116(a, b, ...)   PPUTL_DETAIL_CAT_115(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_117(a, b, ...)   PPUTL_DETAIL_CAT_116(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_118(a, b, ...)   PPUTL_DETAIL_CAT_117(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_119(a, b, ...)   PPUTL_DETAIL_CAT_118(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_120(a, b, ...)   PPUTL_DETAIL_CAT_119(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_121(a, b, ...)   PPUTL_DETAIL_CAT_120(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_122(a, b, ...)   PPUTL_DETAIL_CAT_121(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_123(a, b, ...)   PPUTL_DETAIL_CAT_122(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_124(a, b, ...)   PPUTL_DETAIL_CAT_123(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_125(a, b, ...)   PPUTL_DETAIL_CAT_124(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_126(a, b, ...)   PPUTL_DETAIL_CAT_125(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_127(a, b, ...)   PPUTL_DETAIL_CAT_126(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_128(a, b, ...)   PPUTL_DETAIL_CAT_127(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_129(a, b, ...)   PPUTL_DETAIL_CAT_128(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_130(a, b, ...)   PPUTL_DETAIL_CAT_129(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_131(a, b, ...)   PPUTL_DETAIL_CAT_130(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_132(a, b, ...)   PPUTL_DETAIL_CAT_131(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_133(a, b, ...)   PPUTL_DETAIL_CAT_132(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_134(a, b, ...)   PPUTL_DETAIL_CAT_133(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_135(a, b, ...)   PPUTL_DETAIL_CAT_134(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_136(a, b, ...)   PPUTL_DETAIL_CAT_135(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_137(a, b, ...)   PPUTL_DETAIL_CAT_136(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_138(a, b, ...)   PPUTL_DETAIL_CAT_137(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_139(a, b, ...)   PPUTL_DETAIL_CAT_138(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_140(a, b, ...)   PPUTL_DETAIL_CAT_139(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_141(a, b, ...)   PPUTL_DETAIL_CAT_140(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_142(a, b, ...)   PPUTL_DETAIL_CAT_141(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_143(a, b, ...)   PPUTL_DETAIL_CAT_142(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_144(a, b, ...)   PPUTL_DETAIL_CAT_143(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_145(a, b, ...)   PPUTL_DETAIL_CAT_144(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_146(a, b, ...)   PPUTL_DETAIL_CAT_145(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_147(a, b, ...)   PPUTL_DETAIL_CAT_146(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_148(a, b, ...)   PPUTL_DETAIL_CAT_147(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_149(a, b, ...)   PPUTL_DETAIL_CAT_148(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_150(a, b, ...)   PPUTL_DETAIL_CAT_149(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_151(a, b, ...)   PPUTL_DETAIL_CAT_150(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_152(a, b, ...)   PPUTL_DETAIL_CAT_151(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_153(a, b, ...)   PPUTL_DETAIL_CAT_152(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_154(a, b, ...)   PPUTL_DETAIL_CAT_153(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_155(a, b, ...)   PPUTL_DETAIL_CAT_154(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_156(a, b, ...)   PPUTL_DETAIL_CAT_155(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_157(a, b, ...)   PPUTL_DETAIL_CAT_156(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_158(a, b, ...)   PPUTL_DETAIL_CAT_157(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_159(a, b, ...)   PPUTL_DETAIL_CAT_158(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_160(a, b, ...)   PPUTL_DETAIL_CAT_159(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_161(a, b, ...)   PPUTL_DETAIL_CAT_160(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_162(a, b, ...)   PPUTL_DETAIL_CAT_161(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_163(a, b, ...)   PPUTL_DETAIL_CAT_162(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_164(a, b, ...)   PPUTL_DETAIL_CAT_163(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_165(a, b, ...)   PPUTL_DETAIL_CAT_164(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_166(a, b, ...)   PPUTL_DETAIL_CAT_165(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_167(a, b, ...)   PPUTL_DETAIL_CAT_166(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_168(a, b, ...)   PPUTL_DETAIL_CAT_167(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_169(a, b, ...)   PPUTL_DETAIL_CAT_168(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_170(a, b, ...)   PPUTL_DETAIL_CAT_169(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_171(a, b, ...)   PPUTL_DETAIL_CAT_170(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_172(a, b, ...)   PPUTL_DETAIL_CAT_171(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_173(a, b, ...)   PPUTL_DETAIL_CAT_172(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_174(a, b, ...)   PPUTL_DETAIL_CAT_173(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_175(a, b, ...)   PPUTL_DETAIL_CAT_174(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_176(a, b, ...)   PPUTL_DETAIL_CAT_175(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_177(a, b, ...)   PPUTL_DETAIL_CAT_176(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_178(a, b, ...)   PPUTL_DETAIL_CAT_177(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_179(a, b, ...)   PPUTL_DETAIL_CAT_178(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_180(a, b, ...)   PPUTL_DETAIL_CAT_179(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_181(a, b, ...)   PPUTL_DETAIL_CAT_180(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_182(a, b, ...)   PPUTL_DETAIL_CAT_181(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_183(a, b, ...)   PPUTL_DETAIL_CAT_182(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_184(a, b, ...)   PPUTL_DETAIL_CAT_183(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_185(a, b, ...)   PPUTL_DETAIL_CAT_184(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_186(a, b, ...)   PPUTL_DETAIL_CAT_185(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_187(a, b, ...)   PPUTL_DETAIL_CAT_186(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_188(a, b, ...)   PPUTL_DETAIL_CAT_187(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_189(a, b, ...)   PPUTL_DETAIL_CAT_188(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_190(a, b, ...)   PPUTL_DETAIL_CAT_189(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_191(a, b, ...)   PPUTL_DETAIL_CAT_190(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_192(a, b, ...)   PPUTL_DETAIL_CAT_191(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_193(a, b, ...)   PPUTL_DETAIL_CAT_192(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_194(a, b, ...)   PPUTL_DETAIL_CAT_193(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_195(a, b, ...)   PPUTL_DETAIL_CAT_194(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_196(a, b, ...)   PPUTL_DETAIL_CAT_195(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_197(a, b, ...)   PPUTL_DETAIL_CAT_196(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_198(a, b, ...)   PPUTL_DETAIL_CAT_197(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_199(a, b, ...)   PPUTL_DETAIL_CAT_198(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_200(a, b, ...)   PPUTL_DETAIL_CAT_199(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_201(a, b, ...)   PPUTL_DETAIL_CAT_200(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_202(a, b, ...)   PPUTL_DETAIL_CAT_201(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_203(a, b, ...)   PPUTL_DETAIL_CAT_202(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_204(a, b, ...)   PPUTL_DETAIL_CAT_203(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_205(a, b, ...)   PPUTL_DETAIL_CAT_204(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_206(a, b, ...)   PPUTL_DETAIL_CAT_205(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_207(a, b, ...)   PPUTL_DETAIL_CAT_206(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_208(a, b, ...)   PPUTL_DETAIL_CAT_207(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_209(a, b, ...)   PPUTL_DETAIL_CAT_208(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_210(a, b, ...)   PPUTL_DETAIL_CAT_209(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_211(a, b, ...)   PPUTL_DETAIL_CAT_210(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_212(a, b, ...)   PPUTL_DETAIL_CAT_211(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_213(a, b, ...)   PPUTL_DETAIL_CAT_212(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_214(a, b, ...)   PPUTL_DETAIL_CAT_213(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_215(a, b, ...)   PPUTL_DETAIL_CAT_214(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_216(a, b, ...)   PPUTL_DETAIL_CAT_215(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_217(a, b, ...)   PPUTL_DETAIL_CAT_216(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_218(a, b, ...)   PPUTL_DETAIL_CAT_217(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_219(a, b, ...)   PPUTL_DETAIL_CAT_218(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_220(a, b, ...)   PPUTL_DETAIL_CAT_219(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_221(a, b, ...)   PPUTL_DETAIL_CAT_220(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_222(a, b, ...)   PPUTL_DETAIL_CAT_221(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_223(a, b, ...)   PPUTL_DETAIL_CAT_222(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_224(a, b, ...)   PPUTL_DETAIL_CAT_223(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_225(a, b, ...)   PPUTL_DETAIL_CAT_224(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_226(a, b, ...)   PPUTL_DETAIL_CAT_225(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_227(a, b, ...)   PPUTL_DETAIL_CAT_226(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_228(a, b, ...)   PPUTL_DETAIL_CAT_227(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_229(a, b, ...)   PPUTL_DETAIL_CAT_228(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_230(a, b, ...)   PPUTL_DETAIL_CAT_229(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_231(a, b, ...)   PPUTL_DETAIL_CAT_230(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_232(a, b, ...)   PPUTL_DETAIL_CAT_231(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_233(a, b, ...)   PPUTL_DETAIL_CAT_232(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_234(a, b, ...)   PPUTL_DETAIL_CAT_233(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_235(a, b, ...)   PPUTL_DETAIL_CAT_234(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_236(a, b, ...)   PPUTL_DETAIL_CAT_235(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_237(a, b, ...)   PPUTL_DETAIL_CAT_236(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_238(a, b, ...)   PPUTL_DETAIL_CAT_237(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_239(a, b, ...)   PPUTL_DETAIL_CAT_238(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_240(a, b, ...)   PPUTL_DETAIL_CAT_239(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_241(a, b, ...)   PPUTL_DETAIL_CAT_240(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_242(a, b, ...)   PPUTL_DETAIL_CAT_241(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_243(a, b, ...)   PPUTL_DETAIL_CAT_242(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_244(a, b, ...)   PPUTL_DETAIL_CAT_243(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_245(a, b, ...)   PPUTL_DETAIL_CAT_244(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_246(a, b, ...)   PPUTL_DETAIL_CAT_245(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_247(a, b, ...)   PPUTL_DETAIL_CAT_246(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_248(a, b, ...)   PPUTL_DETAIL_CAT_247(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_249(a, b, ...)   PPUTL_DETAIL_CAT_248(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_250(a, b, ...)   PPUTL_DETAIL_CAT_249(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_251(a, b, ...)   PPUTL_DETAIL_CAT_250(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_252(a, b, ...)   PPUTL_DETAIL_CAT_251(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_253(a, b, ...)   PPUTL_DETAIL_CAT_252(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_254(a, b, ...)   PPUTL_DETAIL_CAT_253(a##b, __VA_ARGS__)
 
#define PPUTL_DETAIL_CAT_255(a, b, ...)   PPUTL_DETAIL_CAT_254(a##b, __VA_ARGS__)
 
#define CCUTL_NAMESPACE   ctl
 
#define CCUTL_EXISTS_CONCEPT_INCLUDED
 
#define CTL_EXISTS_CONCEPT(name, template_params_tuple, template_args_tuple)
 
#define CCUTL_EXISTS_CONCEPT_VERSION_MAJOR   0
 
#define CCUTL_EXISTS_CONCEPT_VERSION_MINOR   3
 
#define CCUTL_EXISTS_CONCEPT_VERSION_PATCH   2
 
#define CCUTL_RMCV_INCLUDED
 
#define CCUTL_RMCV_VERSION_MAJOR   0
 
#define CCUTL_RMCV_VERSION_MINOR   3
 
#define CCUTL_RMCV_VERSION_PATCH   2
 
#define CCUTL_RMREF_INCLUDED
 
#define CCUTL_RMREF_VERSION_MAJOR   0
 
#define CCUTL_RMREF_VERSION_MINOR   3
 
#define CCUTL_RMREF_VERSION_PATCH   2
 
#define CCUTL_EXISTS_INCLUDED
 
#define CCUTL_EXISTS_VERSION_MAJOR   0
 
#define CCUTL_EXISTS_VERSION_MINOR   3
 
#define CCUTL_EXISTS_VERSION_PATCH   2
 
#define CCUTL_FWD_INCLUDED
 
#define CCUTL_FWD_VERSION_MAJOR   0
 
#define CCUTL_FWD_VERSION_MINOR   3
 
#define CCUTL_FWD_VERSION_PATCH   2
 
#define CCUTL_LOWEST_INCLUDED
 
#define CCUTL_LOWEST_VERSION_MAJOR   0
 
#define CCUTL_LOWEST_VERSION_MINOR   3
 
#define CCUTL_LOWEST_VERSION_PATCH   2
 
#define CCUTL_RMCVREF_INCLUDED
 
#define CCUTL_RMCVREF_VERSION_MAJOR   0
 
#define CCUTL_RMCVREF_VERSION_MINOR   3
 
#define CCUTL_RMCVREF_VERSION_PATCH   2
 
#define CCUTL_TARG_INCLUDED
 
#define CCUTL_TARG_VERSION_MAJOR   0
 
#define CCUTL_TARG_VERSION_MINOR   3
 
#define CCUTL_TARG_VERSION_PATCH   2
 
#define CCUTL_TYPEOF_CONCEPT_INCLUDED
 
#define CTL_TYPEOF_CONCEPT(name, template_params_tuple, template_args_tuple)
 
#define CCUTL_TYPEOF_CONCEPT_VERSION_MAJOR   0
 
#define CCUTL_TYPEOF_CONCEPT_VERSION_MINOR   3
 
#define CCUTL_TYPEOF_CONCEPT_VERSION_PATCH   2
 
#define CCUTL_ARG_INCLUDED
 
#define CCUTL_ARG_VERSION_MAJOR   0
 
#define CCUTL_ARG_VERSION_MINOR   3
 
#define CCUTL_ARG_VERSION_PATCH   2
 
#define CCUTL_FOUND_INCLUDED
 
#define CCUTL_FOUND_VERSION_MAJOR   0
 
#define CCUTL_FOUND_VERSION_MINOR   3
 
#define CCUTL_FOUND_VERSION_PATCH   2
 
#define CCUTL_HIGHEST_INCLUDED
 
#define CCUTL_HIGHEST_VERSION_MAJOR   0
 
#define CCUTL_HIGHEST_VERSION_MINOR   3
 
#define CCUTL_HIGHEST_VERSION_PATCH   2
 
#define CCUTL_MV_INCLUDED
 
#define CCUTL_MV_VERSION_MAJOR   0
 
#define CCUTL_MV_VERSION_MINOR   3
 
#define CCUTL_MV_VERSION_PATCH   2
 
#define CCUTL_TYPEOF_INCLUDED
 
#define CCUTL_TYPEOF_VERSION_MAJOR   0
 
#define CCUTL_TYPEOF_VERSION_MINOR   3
 
#define CCUTL_TYPEOF_VERSION_PATCH   2
 
#define CCUTL_FOUND_IF_INCLUDED
 
#define CCUTL_FOUND_IF_VERSION_MAJOR   0
 
#define CCUTL_FOUND_IF_VERSION_MINOR   3
 
#define CCUTL_FOUND_IF_VERSION_PATCH   2
 
#define CCUTL_SAME_INCLUDED
 
#define CCUTL_SAME_VERSION_MAJOR   0
 
#define CCUTL_SAME_VERSION_MINOR   3
 
#define CCUTL_SAME_VERSION_PATCH   2
 
#define CCUTL_TYPE_PACK_INCLUDED
 
#define CCUTL_TYPE_PACK_VERSION_MAJOR   0
 
#define CCUTL_TYPE_PACK_VERSION_MINOR   3
 
#define CCUTL_TYPE_PACK_VERSION_PATCH   2
 
#define CCUTL_DIFFERENT_INCLUDED
 
#define CCUTL_DIFFERENT_VERSION_MAJOR   0
 
#define CCUTL_DIFFERENT_VERSION_MINOR   3
 
#define CCUTL_DIFFERENT_VERSION_PATCH   2
 
#define CCUTL_STREQ_INCLUDED
 
#define CCUTL_STREQ_VERSION_MAJOR   0
 
#define CCUTL_STREQ_VERSION_MINOR   3
 
#define CCUTL_STREQ_VERSION_PATCH   2
 
#define CCUTL_ICMP_INCLUDED
 
#define CCUTL_ICMP_VERSION_MAJOR   0
 
#define CCUTL_ICMP_VERSION_MINOR   3
 
#define CCUTL_ICMP_VERSION_PATCH   2
 
#define CCUTL_VALUE_PACK_INCLUDED
 
#define CCUTL_VALUE_PACK_VERSION_MAJOR   0
 
#define CCUTL_VALUE_PACK_VERSION_MINOR   3
 
#define CCUTL_VALUE_PACK_VERSION_PATCH   2
 
#define CCUTL_VERSION_MAJOR   0
 
#define CCUTL_VERSION_MINOR   3
 
#define CCUTL_VERSION_PATCH   2
 

Typedefs

template<class T >
using CCUTL_NAMESPACE::rmcv = std::remove_cv_t< T >
 
template<class T >
using CCUTL_NAMESPACE::rmref = std::remove_reference_t< T >
 
template<class T >
using CCUTL_NAMESPACE::rmcvref = std::remove_cvref_t< T >
 
template<std::size_t targ, class... Pack>
using CCUTL_NAMESPACE::detail::targ::type = typename impl< targ, 0, Pack... >::type
 helper typedef for impl::type
 
template<std::size_t idx, class... Ts>
using CCUTL_NAMESPACE::targ = detail::targ::type< idx, Ts... >
 

Functions

 CCUTL_NAMESPACE::detail::exists::CTL_EXISTS_CONCEPT (impl,(class... Ts),(Ts...))
 generated concept implementation for exists
 
template<class T >
constexpr T && CCUTL_NAMESPACE::fwd (rmref< T > &t) noexcept
 
template<class T >
constexpr T && CCUTL_NAMESPACE::fwd (rmref< T > &&t) noexcept
 
template<std::size_t idx, class... Ts>
requires constexpr detail::arg::valid_indexable_pack< idx, Ts... > auto && CCUTL_NAMESPACE::arg (Ts &&... args) noexcept
 
template<std::input_iterator I, std::sentinel_for< I > S, class T , class Proj = std::identity>
requires constexpr std::indirect_binary_predicate< std::ranges::equal_to, std::projected< I, Proj >, T const * > bool CCUTL_NAMESPACE::found (I first, S last, T const &value, Proj proj={})
 
template<std::ranges::input_range R, class T , class Proj = std::identity>
requires constexpr std::indirect_binary_predicate< std::ranges::equal_to, std::projected< std::ranges::iterator_t< R >, Proj >, T const * > bool CCUTL_NAMESPACE::found (R &&r, T const &value, Proj proj={})
 
template<class T >
constexpr rmref< T > && CCUTL_NAMESPACE::mv (T &&t) noexcept
 
 CCUTL_NAMESPACE::detail::typeof::CTL_TYPEOF_CONCEPT (impl,(class... Ts),(Ts...))
 generated concept implementation for typeof
 
template<std::input_iterator I, std::sentinel_for< I > S, class Proj = std::identity, std::indirect_unary_predicate< std::projected< I, Proj >> Pred>
constexpr bool CCUTL_NAMESPACE::found_if (I first, S last, Pred pred={}, Proj proj={})
 
template<std::ranges::input_range R, class Proj = std::identity, std::indirect_unary_predicate< std::projected< std::ranges::iterator_t< R >, Proj >> Pred>
constexpr bool CCUTL_NAMESPACE::found_if (R &&r, Pred pred={}, Proj proj={})
 
template<std::size_t i, class First , class... Rest>
constexpr bool CCUTL_NAMESPACE::detail::same::impl () noexcept
 
concept CCUTL_NAMESPACE::Ts ()
 
template<template< class... > class Template, class... Ts>
 CCUTL_NAMESPACE::type_pack (Template< Ts... >) -> type_pack< Ts... >
 allows for deduction construction from type template objects
 
template<stringlike A, stringlike B>
constexpr bool CCUTL_NAMESPACE::detail::streq::impl (A &&a, B &&b) noexcept
 compare two stringlike objects
 
template<stringlike First, stringlike... Rest>
 CCUTL_NAMESPACE::detail::streq::requires (sizeof...(Rest) > 1) inline const expr bool impl(First &&first
 compare more than two stringlike objects
 
template<detail::streq::stringlike... Strings>
 CCUTL_NAMESPACE::requires (sizeof...(Strings) > 1) inline const expr bool streq(Strings &&... strings) noexcept
 
template<std::signed_integral L, std::signed_integral R>
constexpr std::strong_ordering CCUTL_NAMESPACE::detail::icmp::impl (L l, R r)
 eq comparison of signed integrals More...
 
template<std::integral L, std::integral R>
constexpr std::strong_ordering CCUTL_NAMESPACE::icmp (L l, R r) noexcept
 
 CCUTL_NAMESPACE::detail::value_pack::CTL_TYPEOF_CONCEPT (typeof_vtpl,(auto... Vs),(Vs...))
 
 CCUTL_NAMESPACE::detail::value_pack::CTL_EXISTS_CONCEPT (vspec_exists,(auto... Vs),(Vs...))
 
template<template< auto... > class Template, auto... values>
 CCUTL_NAMESPACE::value_pack (Template< values... >) -> value_pack< values... >
 Allows for deduction construction from nontype template objects.
 

Variables

template<template< class... > class Template, class... Args>
concept CCUTL_NAMESPACE::exists = detail::exists::impl<Template, Args...>
 
template<class T >
concept CCUTL_NAMESPACE::detail::lowest::has_numeric_limits_lowest
 checks if std::numeric_limits<Arithmetic>::lowest() is valid More...
 
template<class T >
concept CCUTL_NAMESPACE::detail::lowest::arithmetic = std::integral<T> || std::floating_point<T>
 naiive arithmetic concept that describes an integral or floating_point type
 
template<detail::lowest::arithmetic Arithmetic>
requires constexpr detail::lowest::has_numeric_limits_lowest< Arithmetic > Arithmetic CCUTL_NAMESPACE::lowest = std::numeric_limits<Arithmetic>::lowest()
 
template<std::size_t idx, class... Ts>
constexpr bool CCUTL_NAMESPACE::detail::targ::valid_indexable_pack = sizeof...(Ts) > 0 && idx < sizeof...(Ts)
 checks if idx can be used to index Ts...
 
template<class T >
concept CCUTL_NAMESPACE::detail::highest::has_numeric_limits_max
 checks if std::numeric_limits<Arithmetic>::max() is valid More...
 
template<class T >
concept CCUTL_NAMESPACE::detail::highest::arithmetic = std::integral<T> || std::floating_point<T>
 naiive arithmetic concept that describes an integral or floating_point type
 
template<detail::highest::arithmetic Arithmetic>
requires constexpr detail::highest::has_numeric_limits_max< Arithmetic > Arithmetic CCUTL_NAMESPACE::highest = std::numeric_limits<Arithmetic>::max()
 
template<class T , template< class... > class Template>
concept CCUTL_NAMESPACE::typeof = detail::typeof ::impl<T, Template>
 
template<class... Ts>
concept CCUTL_NAMESPACE::same = sizeof...(Ts) > 0 and detail::same::impl<0
 
template<class... Ts>
concept CCUTL_NAMESPACE::different = !same<Ts...>
 
template<class T >
concept CCUTL_NAMESPACE::detail::streq::stringlike
 defines types that may construct a string view More...
 
Rest && CCUTL_NAMESPACE::detail::streq::rest
 
template<template< auto... > class Template, auto... vs>
concept CCUTL_NAMESPACE::detail::value_pack::specializable_with_nontypes
 checks if a template is specializable with vs... More...
 

Detailed Description

PPUTL_TUPLE_ARGS - returns tuple elements as args

PPUTL_CAT - concatenate [0, 256) args

PPUTL_NARGS - Returns the number of args passed [0, 256)

Macro Definition Documentation

◆ PPUTL_CAT

#define PPUTL_CAT (   ...)    PPUTL_DETAIL_CAT_X(__VA_ARGS__)

concatenate [0, 256) args

◆ PPUTL_DETAIL_CAT_X

#define PPUTL_DETAIL_CAT_X (   ...)
Value:
PPUTL_DETAIL_CAT_CHOOSER(PPUTL_NARGS(__VA_ARGS__)) \
(__VA_ARGS__)

◆ PPUTL_DETAIL_NARGS_E_TOOMANYARGS

#define PPUTL_DETAIL_NARGS_E_TOOMANYARGS
Value:
([] { \
static_assert(false, "PPUTL_NARGS: too many args [0, 256)"); \
return 0; \
})()

◆ PPUTL_NARGS

#define PPUTL_NARGS (   ...)    PPUTL_DETAIL_NARGS_X(__VA_ARGS__)

Returns the number of args passed [0, 256)

◆ PPUTL_TUPLE_ARGS

#define PPUTL_TUPLE_ARGS (   tup)    PPUTL_TUPLE_ARGS_RETURN tup

returns tuple elements as args

#define TUP (3, 2, 1)
PPUTL_AT(0, PPUTL_TUPLE_ARGS(TUP)) // 3

Function Documentation

◆ impl() [1/2]

template<std::size_t i, class First , class... Rest>
constexpr bool CCUTL_NAMESPACE::detail::same::impl ( )
inlineconstexprnoexcept

checks if First, Rest... are the same adheres to the spirit of the same_as conceptual redundancy; (same_as = std::is_same_v<T, U> and std::is_same_v<U, T>) all types are bidirectionally compared with each other

◆ impl() [2/2]

template<std::signed_integral L, std::signed_integral R>
constexpr std::strong_ordering CCUTL_NAMESPACE::detail::icmp::impl ( l,
r 
)
inlineconstexpr

eq comparison of signed integrals

eq comparison of unsigned <=> signed

eq comparison of signed <=> unsigned

eq comparison of unsigned integrals

Variable Documentation

◆ has_numeric_limits_lowest

template<class T >
concept CCUTL_NAMESPACE::detail::lowest::has_numeric_limits_lowest
Initial value:
=
ctl::exists<std::numeric_limits, T>and requires() {
->std::convertible_to<T>;
}

checks if std::numeric_limits<Arithmetic>::lowest() is valid

◆ has_numeric_limits_max

template<class T >
concept CCUTL_NAMESPACE::detail::highest::has_numeric_limits_max
Initial value:
{ std::numeric_limits<T>::max() }
->std::convertible_to<T>;
}

checks if std::numeric_limits<Arithmetic>::max() is valid

◆ rest

Rest&& CCUTL_NAMESPACE::detail::streq::rest
Initial value:
{
return (impl(fwd<First>(first), fwd<Rest>(rest)) && ...)

◆ specializable_with_nontypes

template<template< auto... > class Template, auto... vs>
concept CCUTL_NAMESPACE::detail::value_pack::specializable_with_nontypes
Initial value:
= requires() {
typename Template<vs...>;
}

checks if a template is specializable with vs...

◆ stringlike

template<class T >
concept CCUTL_NAMESPACE::detail::streq::stringlike
Initial value:
= requires(T&& v) {
std::string_view{fwd<T>(v)};
}

defines types that may construct a string view

PPUTL_NARGS
#define PPUTL_NARGS(...)
Definition: ccutl.h:127
CCUTL_NAMESPACE::lowest
requires constexpr detail::lowest::has_numeric_limits_lowest< Arithmetic > Arithmetic lowest
Definition: ccutl.h:956
CCUTL_NAMESPACE::detail::same::impl
constexpr bool impl() noexcept
Definition: ccutl.h:1557
CCUTL_NAMESPACE::requires
requires(sizeof...(Strings) > 1) inline const expr bool streq(Strings &&... strings) noexcept
Definition: ccutl.h:1877