Hi Richard,
MSVC cl compiler allows mutable references even in user code, not only in system header files. I checked it and both 2012, 2013 accepts the code from the test.
I'll add extension warning.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

03.02.2015 20:25, Richard Smith пишет:

Please emit a warning when this extension is used. If we're only doing this to support a system header, you could even make it a DefaultError ExtWarn. Other than that, this looks fine.

On 3 Feb 2015 02:32, "Alexey Bataev" <[email protected] <mailto:[email protected]>> wrote:

    Hi rsmith,

    Some standard header files from MSVC2012 use 'mutable' on
    references, though it is directly prohibited by the standard.

    http://reviews.llvm.org/D7370

    Files:
      lib/Sema/SemaDecl.cpp
      test/SemaCXX/ms_mutable_reference_member.cpp

    Index: lib/Sema/SemaDecl.cpp
    ===================================================================
    --- lib/Sema/SemaDecl.cpp
    +++ lib/Sema/SemaDecl.cpp
    @@ -12347,7 +12347,7 @@
       // Check that 'mutable' is consistent with the type of the
    declaration.
       if (!InvalidDecl && Mutable) {
         unsigned DiagID = 0;
    -    if (T->isReferenceType())
    +    if (!getLangOpts().MSVCCompat && T->isReferenceType())
           DiagID = diag::err_mutable_reference;
         else if (T.isConstQualified())
           DiagID = diag::err_mutable_const;
    Index: test/SemaCXX/ms_mutable_reference_member.cpp
    ===================================================================
    --- test/SemaCXX/ms_mutable_reference_member.cpp
    +++ test/SemaCXX/ms_mutable_reference_member.cpp
    @@ -0,0 +1,14 @@
    +// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-compatibility
    +// expected-no-diagnostics
    +
    +struct S {
    +  mutable int &a;
    +  S(int &b) : a(b) {}
    +};
    +
    +int main() {
    +  int a = 0;
    +  const S s(a);
    +  s.a = 10;
    +  return s.a + a;
    +}

    EMAIL PREFERENCES
    http://reviews.llvm.org/settings/panel/emailpreferences/


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to