1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: The null type - as type placeholder instead of void type
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_TYPE_NULL_TYPE_H
13 #define EXTL_TYPE_NULL_TYPE_H
15 /* ///////////////////////////////////////////////////////////////////////
18 #include "../config/config.h"
21 /* ///////////////////////////////////////////////////////////////////////
28 // forward declaration
30 EXTL_INLINE null_type
const& cnull();
36 // Prohibit generating an instance
38 // Prohibit copy constructor
39 null_type(null_type
const&);
40 // Prohibit assignment
41 null_type
& operator =(null_type
const&);
44 /* Gets a const reference instance as ab placeholder
46 * void func(null_type const& p = cnull());
48 friend null_type
const& cnull()
50 /* a helper function to provide a static const null_type instance */
51 static const null_type s_null_obj
;
56 // is_null_type traits
57 template < typename_param_k T
>
60 EXTL_STATIC_MEMBER_CONST(e_bool_t
, value
= e_false_v
);
63 EXTL_TEMPLATE_SPECIALISATION
64 struct is_null_type
<null_type
>
66 EXTL_STATIC_MEMBER_CONST(e_bool_t
, value
= e_true_v
);
69 #else /* !__cplusplus */
71 typedef struct null_type_tag
{} null_type
;
72 /* a helper function to provide a const null_type type temporary */
73 EXTL_INLINE
const null_type
cnull() { return null_type(); }
75 #endif /* __cplusplus */
78 typedef null_type e_null_t
;
80 /* ///////////////////////////////////////////////////////////////////////
85 /* //////////////////////////////////////////////////////////////////// */
86 #endif /* EXTL_TYPE_NULL_TYPE_H */
87 /* //////////////////////////////////////////////////////////////////// */