[llvm] r185851 - [ADT/NullablePtr] Allow implicit conversion of NullablePtr<OtherT> -> NullablePtr<T> if OtherT is derived from T.

David Blaikie dblaikie at gmail.com
Mon Jul 8 12:47:24 PDT 2013


On Mon, Jul 8, 2013 at 12:12 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Mon Jul  8 14:12:01 2013
> New Revision: 185851
>
> URL: http://llvm.org/viewvc/llvm-project?rev=185851&view=rev
> Log:
> [ADT/NullablePtr] Allow implicit conversion of NullablePtr<OtherT> -> NullablePtr<T> if OtherT is derived from T.

Might be nicer to do this for any case where SrcT* is implicitly
convertible DestT* (such as adding cv qualifiers or converting to
void*).

>
> Modified:
>     llvm/trunk/include/llvm/ADT/NullablePtr.h
>
> Modified: llvm/trunk/include/llvm/ADT/NullablePtr.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/NullablePtr.h?rev=185851&r1=185850&r2=185851&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/NullablePtr.h (original)
> +++ llvm/trunk/include/llvm/ADT/NullablePtr.h Mon Jul  8 14:12:01 2013
> @@ -14,6 +14,7 @@
>  #ifndef LLVM_ADT_NULLABLEPTR_H
>  #define LLVM_ADT_NULLABLEPTR_H
>
> +#include "llvm/Support/type_traits.h"
>  #include <cassert>
>  #include <cstddef>
>
> @@ -25,8 +26,17 @@ namespace llvm {
>  template<class T>
>  class NullablePtr {
>    T *Ptr;
> +  struct PlaceHolder {};
> +
>  public:
>    NullablePtr(T *P = 0) : Ptr(P) {}
> +
> +  template<typename OtherT>
> +  NullablePtr(NullablePtr<OtherT> Other,
> +              typename enable_if<
> +                is_base_of<T, OtherT>,
> +                PlaceHolder
> +              >::type = PlaceHolder()) : Ptr(Other.getPtrOrNull()) {}
>
>    bool isNull() const { return Ptr == 0; }
>    bool isNonNull() const { return Ptr != 0; }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list