1616
1717namespace rtl ::dispatch
1818{
19- template <class record_t , class ...signature_t >
20- struct aware_constructor
21- {
22- static auto get_allocator ( )
23- {
24- return [](alloc p_alloc_on, traits:: normal_sign_t < signature_t >&&... params )-> Return
19+ template <class record_t , class ...signature_t >
20+ struct aware_constructor
21+ {
22+ static Return overloaded_ctor (alloc p_alloc_on, traits:: normal_sign_t < signature_t >&&...params )
23+ {
24+ if ( p_alloc_on == alloc::Stack)
2525 {
26- if (p_alloc_on == alloc::Stack)
27- {
28- if constexpr (std::is_copy_constructible_v<record_t >)
29- {
30- return {
31- error::None,
32- detail::RObjectBuilder<record_t >::template build<alloc::Stack>(
33- record_t (std::forward<signature_t >(params)...), &aware_constructor<record_t >::cloner, true
34- )
35- };
36- }
37- }
38- else if (p_alloc_on == alloc::Heap)
26+ if constexpr (std::is_copy_constructible_v<record_t >)
3927 {
4028 return {
4129 error::None,
42- detail::RObjectBuilder<record_t * >::template build<alloc::Heap >(
43- new record_t (std::forward<signature_t >(params)...), &aware_constructor<record_t >::cloner , true
30+ detail::RObjectBuilder<record_t >::template build<alloc::Stack >(
31+ record_t (std::forward<signature_t >(params)...), &aware_constructor<record_t >::copy_ctor , true
4432 )
4533 };
4634 }
47- return { error::EmptyRObject, RObject{} }; // dead code. compiler warning omitted.
48- };
49- }
35+ }
36+ else if (p_alloc_on == alloc::Heap)
37+ {
38+ return {
39+ error::None,
40+ detail::RObjectBuilder<record_t *>::template build<alloc::Heap>(
41+ new record_t (std::forward<signature_t >(params)...), &aware_constructor<record_t >::copy_ctor, true
42+ )
43+ };
44+ }
45+ return { error::EmptyRObject, RObject{} }; // dead code. compiler warning omitted.
46+ }
5047
5148
52- static Return allocator (alloc p_alloc_on)
49+ static Return default_ctor (alloc p_alloc_on)
5350 {
5451 if constexpr (std::is_default_constructible_v<record_t >)
5552 {
@@ -61,7 +58,7 @@ namespace rtl::dispatch
6158 return {
6259 error::None,
6360 detail::RObjectBuilder<record_t >::template build<alloc::Stack>(
64- record_t (), &aware_constructor<record_t >::cloner , true
61+ record_t (), &aware_constructor<record_t >::copy_ctor , true
6562 )
6663 };
6764 }
@@ -70,7 +67,7 @@ namespace rtl::dispatch
7067 return {
7168 error::None,
7269 detail::RObjectBuilder<record_t *>::template build<alloc::Heap>(
73- new record_t (), &aware_constructor<record_t >::cloner , true
70+ new record_t (), &aware_constructor<record_t >::copy_ctor , true
7471 )
7572 };
7673 default :
@@ -84,7 +81,7 @@ namespace rtl::dispatch
8481 }
8582
8683
87- static Return cloner (alloc p_alloc_on, const RObject& p_other)
84+ static Return copy_ctor (alloc p_alloc_on, const RObject& p_other)
8885 {
8986 if constexpr (std::is_copy_constructible_v<record_t >)
9087 {
@@ -95,14 +92,14 @@ namespace rtl::dispatch
9592 return {
9693 error::None,
9794 detail::RObjectBuilder<record_t >::template build<alloc::Stack>(
98- record_t (srcObj), &aware_constructor<record_t >::cloner , true
95+ record_t (srcObj), &aware_constructor<record_t >::copy_ctor , true
9996 )
10097 };
10198 case alloc::Heap:
10299 return {
103100 error::None,
104101 detail::RObjectBuilder<record_t *>::template build<alloc::Heap>(
105- new record_t (srcObj), &aware_constructor<record_t >::cloner , true
102+ new record_t (srcObj), &aware_constructor<record_t >::copy_ctor , true
106103 )
107104 };
108105 default :
0 commit comments