[DEBUG] correct pb on the 'void& operator*()'

This commit is contained in:
Edouard DUPIN 2016-07-17 18:17:49 +02:00
parent f2dd438a7d
commit 447ae56fd5
2 changed files with 42 additions and 31 deletions

View File

@ -53,36 +53,54 @@ namespace ememory {
public:
void reset();
int64_t useCount() const;
bool operator == (std::nullptr_t) const;
bool operator==(std::nullptr_t) const;
bool operator==(const SharedPtr<EMEMORY_TYPE>& _obj) const;
bool operator != (std::nullptr_t) const;
bool operator!=(std::nullptr_t) const;
bool operator!=(const SharedPtr<EMEMORY_TYPE>& _obj) const;
const EMEMORY_TYPE* get() const;
EMEMORY_TYPE* get();
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
const EMEMORY_TYPE* operator->() const;
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
EMEMORY_TYPE* operator->();
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
const EMEMORY_TYPE& operator*() const;
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
EMEMORY_TYPE& operator*();
#if 0
template<>
const typename std::enable_if<!std::is_void<EMEMORY_TYPE>::value, EMEMORY_TYPE>::type& operator*() const {
return *m_element;
}
template<>
typename std::enable_if<!std::is_void<EMEMORY_TYPE>::value, EMEMORY_TYPE&>::type operator*() {
return *m_element;
}
#else
#if 1
template<class EMEMORY_TYPE2,
typename std::enable_if< !std::is_void<EMEMORY_TYPE>::value
&& !std::is_void<EMEMORY_TYPE2>::value
, int>::type>
const EMEMORY_TYPE2& operator*() const {
return *m_element;
}
template<class EMEMORY_TYPE2,
typename std::enable_if< !std::is_void<EMEMORY_TYPE>::value
&& !std::is_void<EMEMORY_TYPE2>::value
, int>::type>
EMEMORY_TYPE2& operator*() {
return *m_element;
}
#else
const EMEMORY_TYPE& operator*() const {
return *m_element;
}
EMEMORY_TYPE& operator*() {
return *m_element;
}
#endif
#endif
void swap(SharedPtr<EMEMORY_TYPE>& _obj);
ememory::Counter* getCounter() const {
return m_counter;
}
// TODO: unique
// TODO: bool
};
}

View File

@ -235,27 +235,19 @@ EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::get() {
}
template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
const EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() const {
return m_element;
}
template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() {
return m_element;
}
/*
template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
&& !std::is_void<EMEMORY_TYPE2>::value
, int>::type>
const EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() const {
return *m_element;
@ -264,11 +256,12 @@ const EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() const {
template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
&& !std::is_void<EMEMORY_TYPE2>::value
, int>::type>
EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() {
return *m_element;
}
*/
template<typename EMEMORY_TYPE>
void ememory::SharedPtr<EMEMORY_TYPE>::swap(SharedPtr& _obj) {