don't compile with incomplete types
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@579 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
d1fa26e239
commit
a28d4d6ddd
1 changed files with 22 additions and 16 deletions
|
@ -32,17 +32,7 @@ namespace Loki
|
|||
struct ConstPropPtr
|
||||
{
|
||||
explicit ConstPropPtr(T* p) : ptr_(p) {}
|
||||
~ConstPropPtr()
|
||||
{
|
||||
// If compilation brakes here make sure
|
||||
// you've declared the destructor of the class
|
||||
// hosting the pimpl, also don't inline the
|
||||
// destructor.
|
||||
typedef char T_must_be_defined[sizeof(T) ? 1 : -1 ];
|
||||
delete ptr_;
|
||||
ptr_ = 0;
|
||||
}
|
||||
|
||||
~ConstPropPtr() { delete ptr_; ptr_ = 0; }
|
||||
T* operator->() { return ptr_; }
|
||||
T& operator*() { return *ptr_; }
|
||||
const T* operator->() const { return ptr_; }
|
||||
|
@ -74,6 +64,19 @@ namespace Loki
|
|||
Pimpl() : ptr_(new T)
|
||||
{}
|
||||
|
||||
~Pimpl()
|
||||
{
|
||||
// Don't compile with incomplete type
|
||||
//
|
||||
// If compilation brakes here make sure
|
||||
// the compiler does not auto-generate the
|
||||
// destructor of the class hosting the pimpl:
|
||||
// - implement the destructor of the class
|
||||
// - don't inline the destructor
|
||||
typedef char T_must_be_defined[sizeof(T) ? 1 : -1 ];
|
||||
}
|
||||
|
||||
|
||||
T* operator->()
|
||||
{
|
||||
return ptr_.operator->();
|
||||
|
@ -165,6 +168,9 @@ namespace Loki
|
|||
#endif
|
||||
|
||||
// $Log$
|
||||
// Revision 1.17 2006/03/02 09:55:37 syntheticpp
|
||||
// don't compile with incomplete types
|
||||
//
|
||||
// Revision 1.16 2006/03/01 15:20:19 syntheticpp
|
||||
// add documenation how to avoid the -deletion of pointer to incomplete type- error
|
||||
//
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue