MeshLib C++ Docs
Loading...
Searching...
No Matches
MRCanonicalTypedefs.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
MRMesh/MRMacros.h
"
4
22
23
#define MR_CANONICAL_TYPEDEFS(type_, name_, aliases_) \
24
MR_IDENTITY type_ name_; \
25
MR_END(DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_A aliases_) \
26
DETAIL_MR_CANONICAL_TYPEDEFS(type_, name_, aliases_)
27
28
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_BODY(name_, ...) using name_ = __VA_ARGS__;
30
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_A(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_BODY MR_IDENTITY()(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_B
31
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_B(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_BODY MR_IDENTITY()(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_A
32
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_A_END
33
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_USING_B_END
34
35
#if defined(__has_attribute)
36
#if __has_attribute(__preferred_name__)
37
#define DETAIL_MR_CANONICAL_TYPEDEFS(type_, name_, aliases_) \
38
MR_IDENTITY type_ \
39
MR_END(DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_A aliases_) \
40
name_; \
41
DETAIL_MR_CANONICAL_TYPEDEFS_CLANG_WORKAROUND(aliases_)
42
43
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_BODY(name_, ...) __attribute__((__preferred_name__(name_)))
44
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_A(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_BODY(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_B
45
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_B(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_BODY(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_A
46
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_A_END
47
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_ATTR_B_END
48
49
#ifdef __clang__
50
51
#define DETAIL_MR_CANONICAL_TYPEDEFS_CLANG_WORKAROUND(aliases_) \
52
MR_END(DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_A aliases_)
53
54
namespace
MR::detail::CanonicalTypedefs
55
{
56
template
<
typename
>
struct
RegisterType {};
57
}
58
59
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_BODY(name_, ...) static_assert((void(::MR::detail::CanonicalTypedefs::RegisterType<__VA_ARGS__>{}), true));
60
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_A(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_BODY(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_B
61
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_B(...) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_BODY(__VA_ARGS__) DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_A
62
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_A_END
63
#define DETAIL_MR_CANONICAL_TYPEDEFS_LOOP_TOUCH_B_END
64
65
#else
66
#define DETAIL_MR_CANONICAL_TYPEDEFS_CLANG_WORKAROUND(aliases_)
67
#endif
68
69
#else
70
#define DETAIL_MR_CANONICAL_TYPEDEFS(type_, name_, aliases_)
71
#endif
72
73
#else
74
#define DETAIL_MR_CANONICAL_TYPEDEFS(type_, name_, aliases_)
75
#endif
MRMacros.h
MeshLib
source
MRMesh
MRCanonicalTypedefs.h
Generated by
1.11.0