diff --git a/applications/test/autoPtr/Test-autoPtr.C b/applications/test/autoPtr/Test-autoPtr.C index edd7f222e828131002fd9d4e1c5d6828ed9760d2..a7783b3a316aa0f4aa383fe8326a10fdab244b51 100644 --- a/applications/test/autoPtr/Test-autoPtr.C +++ b/applications/test/autoPtr/Test-autoPtr.C @@ -143,7 +143,7 @@ int main(int argc, char *argv[]) Info<<"now have valid=" << Switch(list.valid()).c_str(); - if (list.valid()) + if (list) { Info<< nl << flatOutput(*list) << " @ " << long(list->cdata()) @@ -153,6 +153,22 @@ int main(int argc, char *argv[]) { Info<< nl; } + + // These should fail to compile + #if 0 + label val0 = 0; + + if (true) + { + val0 = list; + } + + label val1 = 10; + + if (val1 == list) + { + } + #endif } // Memory transfer diff --git a/src/OpenFOAM/memory/autoPtr/autoPtr.H b/src/OpenFOAM/memory/autoPtr/autoPtr.H index 0d88f1b61bdd7b287bddd6aefd77c2b0c8bca682..d005924dd7d282356f0dfe0288a00b9e5c0859a5 100644 --- a/src/OpenFOAM/memory/autoPtr/autoPtr.H +++ b/src/OpenFOAM/memory/autoPtr/autoPtr.H @@ -234,6 +234,8 @@ public: operator const T&() const = delete; #endif + //- True if the managed pointer is non-null + explicit inline operator bool() const noexcept; //- Transfer object ownership from parameter inline void operator=(autoPtr<T>&& ap) noexcept; diff --git a/src/OpenFOAM/memory/autoPtr/autoPtrI.H b/src/OpenFOAM/memory/autoPtr/autoPtrI.H index 128fabe5abda13938fbd5ff922617682ae07700c..9d2df12e6a75e90267ae8ca7dfa6dee5d54a93f9 100644 --- a/src/OpenFOAM/memory/autoPtr/autoPtrI.H +++ b/src/OpenFOAM/memory/autoPtr/autoPtrI.H @@ -260,6 +260,13 @@ inline const T& Foam::autoPtr<T>::operator()() const } +template<class T> +inline Foam::autoPtr<T>::operator bool() const noexcept +{ + return ptr_; +} + + template<class T> inline void Foam::autoPtr<T>::operator=(autoPtr<T>&& ap) noexcept {