Index: include/new =================================================================== --- include/new +++ include/new @@ -125,8 +125,18 @@ } // std -#if defined(_WIN32) && !defined(cxx_EXPORTS) -# define _LIBCPP_NEW_DELETE_VIS _LIBCPP_FUNC_VIS_ONLY +/* + * NOTE: When using the Microsoft CRT, the operator new and delete + * family of functions are defined statically in msvcrt.lib. Marking + * them as dllimport in this header is therefore undesirable: if we were + * to mark them dllimport and then link against libc++, source files + * which included would end up linking against libc++'s new and + * delete, while source files which did not include would end up + * still linking against msvcrt's new and delete, which would be a + * confusing and potentially error-prone inconsistency. + */ +#if defined(_LIBCPP_MSVCRT) && !defined(_LIBCPP_BUILDING_LIBRARY) +# define _LIBCPP_NEW_DELETE_VIS #else # define _LIBCPP_NEW_DELETE_VIS _LIBCPP_FUNC_VIS #endif