Limit concat to non pointer types to avoid hard to track problems

This commit is contained in:
Jaby 2023-11-26 18:54:24 -05:00 committed by Jaby
parent 0a6ed5f2ba
commit 4bcfbf1f19
2 changed files with 20 additions and 2 deletions

View File

@ -69,6 +69,23 @@ namespace JabyEngine {
struct conjunction<B1, Bn...> : conditional<bool(B1::value), conjunction<Bn...>, B1>::type { struct conjunction<B1, Bn...> : conditional<bool(B1::value), conjunction<Bn...>, B1>::type {
}; };
// #############################################
template<class T>
struct is_pointer : false_type {};
template<class T>
struct is_pointer<T*> : true_type {};
template<class T>
struct is_pointer<T* const> : true_type {};
template<class T>
struct is_pointer<T* volatile> : true_type {};
template<class T>
struct is_pointer<T* const volatile> : true_type {};
// ############################################# // #############################################
template<typename T, typename... Ts> template<typename T, typename... Ts>

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "../../Auxiliary/bits.hpp" #include "../../Auxiliary/bits.hpp"
#include "../../Auxiliary/type_traits.hpp"
namespace JabyEngine { namespace JabyEngine {
namespace GPU { namespace GPU {
@ -37,13 +38,13 @@ namespace JabyEngine {
} }
template<typename T> template<typename T>
T& concat(T& obj) { enable_if<!is_pointer<T>::value, T&>::type concat(T& obj) {
Link::set_adr(&obj); Link::set_adr(&obj);
return obj; return obj;
} }
template<typename T> template<typename T>
const T& concat(const T& obj) { enable_if<!is_pointer<T>::value, const T&>::type concat(const T& obj) {
return concat(const_cast<T&>(obj)); return concat(const_cast<T&>(obj));
} }