[llvm] r223238 - Silencing several "multiple copy constructors" warnings from MSVC; NFC.

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Dec 3 10:36:48 PST 2014


I don't understand this.  AFAICT, that's the *only* copy constructor.
If that function isn't deleted, compilers will generate one, won't they?

Here's the full text, after your change:

> template <int I> struct EmplaceableArg {
>   EmplaceableArgState State;
>   EmplaceableArg() : State(EAS_Defaulted) {}
>   EmplaceableArg(EmplaceableArg &&X)
>       : State(X.State == EAS_Arg ? EAS_RValue : EAS_Failure) {}
>   EmplaceableArg(EmplaceableArg &X)
>       : State(X.State == EAS_Arg ? EAS_LValue : EAS_Failure) {}
> 
>   explicit EmplaceableArg(bool) : State(EAS_Arg) {}
> 
> private:
>   EmplaceableArg &operator=(EmplaceableArg &&) LLVM_DELETED_FUNCTION;
>   EmplaceableArg &operator=(const EmplaceableArg &) LLVM_DELETED_FUNCTION;
> };

I don't see any copy constructors anymore.

Two questions:

 1. Can someone explain what's going on with MSVC here?

 2. Is there a macro I can use to add back the deleted copy constructor
    when we're not using MSVC?

OTOH, this warning doesn't look useful.  Should we be disabling it in the
MSVC build?

(Or maybe my premise is wrong?  Does the standard not generate a normal
copy constructor here?)

> On 2014-Dec-03, at 06:44, Aaron Ballman <aaron at aaronballman.com> wrote:
> 
> Author: aaronballman
> Date: Wed Dec  3 08:44:16 2014
> New Revision: 223238
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=223238&view=rev
> Log:
> Silencing several "multiple copy constructors" warnings from MSVC; NFC.
> 
> Modified:
>    llvm/trunk/unittests/ADT/SmallVectorTest.cpp
> 
> Modified: llvm/trunk/unittests/ADT/SmallVectorTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/SmallVectorTest.cpp?rev=223238&r1=223237&r2=223238&view=diff
> ==============================================================================
> --- llvm/trunk/unittests/ADT/SmallVectorTest.cpp (original)
> +++ llvm/trunk/unittests/ADT/SmallVectorTest.cpp Wed Dec  3 08:44:16 2014
> @@ -717,7 +717,6 @@ template <int I> struct EmplaceableArg {
>   explicit EmplaceableArg(bool) : State(EAS_Arg) {}
> 
> private:
> -  EmplaceableArg(const EmplaceableArg &X) LLVM_DELETED_FUNCTION;
>   EmplaceableArg &operator=(EmplaceableArg &&) LLVM_DELETED_FUNCTION;
>   EmplaceableArg &operator=(const EmplaceableArg &) LLVM_DELETED_FUNCTION;
> };
> 
> 
> _______________________________________________
> 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