================ @@ -5821,3 +5821,33 @@ specify the starting offset to begin embedding from. The resources is treated as being empty if the specified offset is larger than the number of bytes in the resource. The offset will be applied *before* any ``limit`` parameters are applied. + +MSVC Extensions +=============== + +Clang supports a number of extensions inorder to imitate MSVC. +Some of these extensions are behind ``-fms-compatibility`` and ``-fms-extensions`` which +are further described in :doc:`MSVCCompatibility`. + +MSVC Reference Binding +---------------------- + +.. code-block:: c++ + + struct A {}; + + A& a = A(); + +Please see the `MSDN doc +<https://learn.microsoft.com/en-us/cpp/build/reference/zc-referencebinding-enforce-reference-binding-rules>`_ +for more information on this non-conforming C++ extension. + +MSVC allows user-defined type temporaries to be bound to non-const lvalue references when ``/permissive`` +or ``/Zc:referenceBinding-`` are given on the command line. + +The current default behavior as of MSVC 1940 is ``/permissive``. +As of Visual Studio 2017, ``/permissive-`` is the default for projects meaning C++ conformance is enforced when +building with MSVC in Visual Studio. + +This MSVC extension can be enabled with ``-fms-reference-binding`` with the clang or cl driver. +This MSVC extension can be enabled with ``/Zc:referenceBinding-`` with the cl driver. ---------------- zmodem wrote:
Let's s/cl/clang-cl/g. (I think we always refer to it as clang-cl in docs.) https://github.com/llvm/llvm-project/pull/99833 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits