Skip to content

Commit b811508

Browse files
committed
gcc/clang compile error fix.
1 parent d0f226d commit b811508

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

ReflectionTemplateLib/detail/inc/RObjectBuilder.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@ namespace rtl
4747
inline RObject reflect(T(&pArr)[N]) noexcept
4848
{
4949
if constexpr (std::is_same_v<traits::raw_t<T>, char>) {
50-
return detail::RObjectBuilder<std::string_view>::build<alloc::Stack>(std::string_view(pArr, N - 1), !traits::is_const_v<T>);
50+
return detail::RObjectBuilder<std::string_view>::template
51+
build<alloc::Stack>(std::string_view(pArr, N - 1), !traits::is_const_v<T>);
5152
}
5253
else {
53-
return detail::RObjectBuilder<std::vector<T>>::build<alloc::Stack>(std::vector(pArr, pArr + N), !traits::is_const_v<T>);
54+
return detail::RObjectBuilder<std::vector<T>>::template
55+
build<alloc::Stack>(std::vector(pArr, pArr + N), !traits::is_const_v<T>);
5456
}
5557
}
5658

@@ -61,12 +63,14 @@ namespace rtl
6163
using _T = traits::raw_t<T>;
6264
if constexpr (traits::std_wrapper<_T>::type == detail::Wrapper::None)
6365
{
64-
return detail::RObjectBuilder<T>::build<alloc::Stack>(std::forward<T>(pVal), !traits::is_const_v<T>);
66+
return detail::RObjectBuilder<T>::template
67+
build<alloc::Stack>(std::forward<T>(pVal), !traits::is_const_v<T>);
6568
}
6669
else
6770
{
6871
constexpr bool isConstCastSafe = !traits::is_const_v<typename traits::std_wrapper<_T>::value_type>;
69-
return detail::RObjectBuilder<T>::build<alloc::Stack>(std::forward<T>(pVal), isConstCastSafe);
72+
return detail::RObjectBuilder<T>::template
73+
build<alloc::Stack>(std::forward<T>(pVal), isConstCastSafe);
7074
}
7175
}
7276
}

ReflectionTemplateLib/detail/inc/SetupConstructor.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ namespace rtl::detail
3737
}
3838
else {
3939
return { error::None,
40-
RObjectBuilder<_recordType>::build<alloc::Stack>(
41-
_recordType(std::forward<_signature>(params)...), true)
40+
RObjectBuilder<_recordType>::template
41+
build<alloc::Stack>(_recordType(std::forward<_signature>(params)...), true)
4242
};
4343
}
4444
}
4545
else if (pAllocType == alloc::Heap) {
4646
return { error::None,
47-
RObjectBuilder<_recordType*>::build<alloc::Heap>(
48-
new _recordType(std::forward<_signature>(params)...), true)
47+
RObjectBuilder<_recordType*>::template
48+
build<alloc::Heap>(new _recordType(std::forward<_signature>(params)...), true)
4949
};
5050
}
5151
}

ReflectionTemplateLib/detail/inc/SetupFunction.hpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,18 @@ namespace rtl
4848
*/ using _rawRetType = traits::raw_t<_returnType>;
4949
const _rawRetType& retObj = pFunctor(std::forward<_signature>(params)...);
5050
return { error::None,
51-
RObjectBuilder<const _rawRetType*>::build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
51+
RObjectBuilder<const _rawRetType*>::template
52+
build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
5253
};
5354
}
5455
else {
5556
//if the function returns anything (not refrence), this block will be retained by compiler.
56-
_returnType&& retObj = std::move(pFunctor(std::forward<_signature>(params)...));
57+
auto&& retObj = pFunctor(std::forward<_signature>(params)...);
58+
using T = std::remove_cvref_t<decltype(retObj)>;
59+
5760
return { error::None,
58-
RObjectBuilder<_returnType>::build<rtl::alloc::Stack>(
59-
std::forward<_returnType>(retObj), isConstCastSafe)
61+
RObjectBuilder<const T>::template
62+
build<rtl::alloc::Stack>(std::forward<decltype(retObj)>(retObj), isConstCastSafe)
6063
};
6164
}
6265
};

ReflectionTemplateLib/detail/inc/SetupMethod.hpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,18 @@ namespace rtl
6464
*/ using _rawRetType = traits::raw_t<_returnType>;
6565
const _rawRetType& retObj = (target.*pFunctor)(std::forward<_signature>(params)...);
6666
return { error::None,
67-
RObjectBuilder<const _rawRetType*>::build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
67+
RObjectBuilder<const _rawRetType*>::template
68+
build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
6869
};
6970
}
7071
else {
7172

72-
_returnType&& retObj = std::move((target.*pFunctor)(std::forward<_signature>(params)...));
73+
auto&& retObj = (target.*pFunctor)(std::forward<_signature>(params)...);
74+
using T = std::remove_cvref_t<decltype(retObj)>;
75+
7376
return { error::None,
74-
RObjectBuilder<_returnType>::build<alloc::Stack>(
75-
std::forward<_returnType>(retObj), isConstCastSafe)
77+
RObjectBuilder<const T>::template
78+
build<rtl::alloc::Stack>(std::forward<decltype(retObj)>(retObj), isConstCastSafe)
7679
};
7780
}
7881
};
@@ -114,14 +117,18 @@ namespace rtl
114117
*/ using _rawRetType = traits::raw_t<_returnType>;
115118
const _rawRetType& retObj = (target.*pFunctor)(std::forward<_signature>(params)...);
116119
return { error::None,
117-
RObjectBuilder<const _rawRetType*>::build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
120+
RObjectBuilder<const _rawRetType*>::template
121+
build<rtl::alloc::Stack>(&retObj, isConstCastSafe)
118122
};
119123
}
120124
else {
121-
_returnType&& retObj = std::move((target.*pFunctor)(std::forward<_signature>(params)...));
125+
126+
auto&& retObj = (target.*pFunctor)(std::forward<_signature>(params)...);
127+
using T = std::remove_cvref_t<decltype(retObj)>;
128+
122129
return { error::None,
123-
RObjectBuilder<_returnType>::build<alloc::Stack>(
124-
std::forward<_returnType>(retObj), isConstCastSafe)
130+
RObjectBuilder<const T>::template
131+
build<rtl::alloc::Stack>(std::forward<decltype(retObj)>(retObj), isConstCastSafe)
125132
};
126133
}
127134
};

0 commit comments

Comments
 (0)