Compiling Boost.TypeTraits tests using VC++ RTL

If I compile Boost type traits on Windows using VC++ RTL I get:

"add_const_test.cpp" -Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj" -TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600 /wd4675 /EHs -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++ ..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

     call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe" @"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
error: cannot mangle RTTI descriptors for type 'codecvt' yet
error: cannot mangle the name of type 'codecvt' into RTTI descriptors yet
error: cannot mangle RTTI descriptors for type 'codecvt_base' yet
error: cannot mangle the name of type 'codecvt_base' into RTTI descriptors yet
error: cannot mangle RTTI descriptors for type 'facet' yet
error: cannot mangle the name of type 'facet' into RTTI descriptors yet
6 errors generated.""

If I add '-D_HAS_EXCEPTIONS=0 /GR-' as recommended I then get, when including 'typeinfo':

""add_const_test.cpp" -Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj" -TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600 /wd4675 /EHs -D_HAS_EXCEPTIONS=0 /EH- /GR- -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++ ..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

     call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 > nul
"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe" @"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
clang-cl.exe: warning: argument unused during compilation: '/EH-'
In file included from add_const_test.cpp:7:
In file included from ./test.hpp:10:
In file included from ..\..\..\boost/config.hpp:44:
In file included from ..\..\..\boost/config/stdlib/dinkumware.hpp:89:
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\typeinfo(156,10) : error: unknown class name 'exception'; did you mean '_exception'?
         : public exception"

Is there a workaround to either of these problems ?

Hi Edward,

If I compile Boost type traits on Windows using VC++ RTL I get:

"add_const_test.cpp"
-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++
..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

    call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"
@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
error: cannot mangle RTTI descriptors for type 'codecvt' yet
error: cannot mangle the name of type 'codecvt' into RTTI descriptors yet
error: cannot mangle RTTI descriptors for type 'codecvt_base' yet
error: cannot mangle the name of type 'codecvt_base' into RTTI descriptors
yet
error: cannot mangle RTTI descriptors for type 'facet' yet
error: cannot mangle the name of type 'facet' into RTTI descriptors yet
6 errors generated.""

If I add '-D_HAS_EXCEPTIONS=0 /GR-' as recommended I then get, when
including 'typeinfo':

""add_const_test.cpp"
-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -D_HAS_EXCEPTIONS=0 /EH- /GR- -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++
..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

    call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"
@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
clang-cl.exe: warning: argument unused during compilation: '/EH-'
In file included from add_const_test.cpp:7:
In file included from ./test.hpp:10:
In file included from ..\..\..\boost/config.hpp:44:
In file included from ..\..\..\boost/config/stdlib/dinkumware.hpp:89:
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\typeinfo(156,10) :
error: unknown class name 'exception'; did you mean '_exception'?
        : public exception"

Is there a workaround to either of these problems ?

It seems the reality here is that clang-cl just cannot compile this
file today. The work-around for that situation is to compile with the
/fallback option [1]. I also just published a blog post about this
[2].

Hopefully that helps.

- Hans

[1]. Clang Compiler User’s Manual — Clang 18.0.0git documentation
[2]. The clang-cl /fallback mode - The LLVM Project Blog

Even with /fallback specified I am still seeing:

error(clang): cannot mangle RTTI descriptors for type 'codecvt' yet
error(clang): cannot mangle the name of type 'codecvt' into RTTI descriptors yet
error(clang): cannot mangle RTTI descriptors for type 'codecvt_base' yet
error(clang): cannot mangle the name of type 'codecvt_base' into RTTI descriptors yet
error(clang): cannot mangle RTTI descriptors for type 'facet' yet
error(clang): cannot mangle the name of type 'facet' into RTTI descriptors yet
error(clang): cannot mangle RTTI descriptors for type '_Facet_base' yet
error(clang): cannot mangle the name of type '_Facet_base' into RTTI descriptors yet

BTW I see a great deal of:

note(clang): expanded from macro 'XXX'

in the output when macros are bring expanded. While this may be ordinarily helpful for macro expansion I would like to turn this off by default. How do I do that ?

Hi Edward,

If I compile Boost type traits on Windows using VC++ RTL I get:

"add_const_test.cpp"

-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++

..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

     call "C:\Program Files\Microsoft Visual Studio
10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"

@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
error: cannot mangle RTTI descriptors for type 'codecvt' yet
error: cannot mangle the name of type 'codecvt' into RTTI descriptors yet
error: cannot mangle RTTI descriptors for type 'codecvt_base' yet
error: cannot mangle the name of type 'codecvt_base' into RTTI
descriptors
yet
error: cannot mangle RTTI descriptors for type 'facet' yet
error: cannot mangle the name of type 'facet' into RTTI descriptors yet
6 errors generated.""

If I add '-D_HAS_EXCEPTIONS=0 /GR-' as recommended I then get, when
including 'typeinfo':

""add_const_test.cpp"

-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -D_HAS_EXCEPTIONS=0 /EH- /GR- -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++

..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

     call "C:\Program Files\Microsoft Visual Studio
10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"

@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
clang-cl.exe: warning: argument unused during compilation: '/EH-'
In file included from add_const_test.cpp:7:
In file included from ./test.hpp:10:
In file included from ..\..\..\boost/config.hpp:44:
In file included from ..\..\..\boost/config/stdlib/dinkumware.hpp:89:
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\typeinfo(156,10)
:
error: unknown class name 'exception'; did you mean '_exception'?
         : public exception"

Is there a workaround to either of these problems ?

It seems the reality here is that clang-cl just cannot compile this
file today. The work-around for that situation is to compile with the
/fallback option [1]. I also just published a blog post about this
[2].

Hopefully that helps.

Even with /fallback specified I am still seeing:

error(clang): cannot mangle RTTI descriptors for type 'codecvt' yet
error(clang): cannot mangle the name of type 'codecvt' into RTTI descriptors
yet
error(clang): cannot mangle RTTI descriptors for type 'codecvt_base' yet
error(clang): cannot mangle the name of type 'codecvt_base' into RTTI
descriptors yet
error(clang): cannot mangle RTTI descriptors for type 'facet' yet
error(clang): cannot mangle the name of type 'facet' into RTTI descriptors
yet
error(clang): cannot mangle RTTI descriptors for type '_Facet_base' yet
error(clang): cannot mangle the name of type '_Facet_base' into RTTI
descriptors yet

Yes, in /fallback mode, clang-cl will still print the errors it
encounters, but it will then try building with cl.exe afterwards.

BTW I see a great deal of:

note(clang): expanded from macro 'XXX'

in the output when macros are bring expanded. While this may be ordinarily
helpful for macro expansion I would like to turn this off by default. How do
I do that ?

I don't think Clang has an option to turn these off (others on this
list please correct me if I'm wrong), but there is an option to limit
the length of the backtrace: -fmacro-backtrace-limit. This is not
currently exposed in clang-cl though :confused:

Thanks,
Hans

Hi Edward,

If I compile Boost type traits on Windows using VC++ RTL I get:

"add_const_test.cpp"

-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++

..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

      call "C:\Program Files\Microsoft Visual Studio
10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"

@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
error: cannot mangle RTTI descriptors for type 'codecvt' yet
error: cannot mangle the name of type 'codecvt' into RTTI descriptors yet
error: cannot mangle RTTI descriptors for type 'codecvt_base' yet
error: cannot mangle the name of type 'codecvt_base' into RTTI
descriptors
yet
error: cannot mangle RTTI descriptors for type 'facet' yet
error: cannot mangle the name of type 'facet' into RTTI descriptors yet
6 errors generated.""

If I add '-D_HAS_EXCEPTIONS=0 /GR-' as recommended I then get, when
including 'typeinfo':

""add_const_test.cpp"

-Fo"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj"
-TP /Od /Ob0 /W4 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1600
/wd4675 /EHs -D_HAS_EXCEPTIONS=0 /EH- /GR- -c
-DBOOST_ALL_NO_LIB=1
"-I..\..\.."
compile-c-c++

..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj

      call "C:\Program Files\Microsoft Visual Studio
10.0\VC\vcvarsall.bat"
x86 > nul

"C:\Programming\VersionControl\clang_build\bin\Release\clang-cl.exe"

@"..\..\..\bin.v2\libs\type_traits\test\add_const_test.test\clang-vc10-win-3.4\debug\add_const_test.obj.rsp"

clang-cl.exe: warning: argument unused during compilation: '/EHs'
clang-cl.exe: warning: argument unused during compilation: '/EH-'
In file included from add_const_test.cpp:7:
In file included from ./test.hpp:10:
In file included from ..\..\..\boost/config.hpp:44:
In file included from ..\..\..\boost/config/stdlib/dinkumware.hpp:89:
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\typeinfo(156,10)
:
error: unknown class name 'exception'; did you mean '_exception'?
          : public exception"

Is there a workaround to either of these problems ?

It seems the reality here is that clang-cl just cannot compile this
file today. The work-around for that situation is to compile with the
/fallback option [1]. I also just published a blog post about this
[2].

Hopefully that helps.

Even with /fallback specified I am still seeing:

error(clang): cannot mangle RTTI descriptors for type 'codecvt' yet
error(clang): cannot mangle the name of type 'codecvt' into RTTI descriptors
yet
error(clang): cannot mangle RTTI descriptors for type 'codecvt_base' yet
error(clang): cannot mangle the name of type 'codecvt_base' into RTTI
descriptors yet
error(clang): cannot mangle RTTI descriptors for type 'facet' yet
error(clang): cannot mangle the name of type 'facet' into RTTI descriptors
yet
error(clang): cannot mangle RTTI descriptors for type '_Facet_base' yet
error(clang): cannot mangle the name of type '_Facet_base' into RTTI
descriptors yet

Yes, in /fallback mode, clang-cl will still print the errors it
encounters, but it will then try building with cl.exe afterwards.

You are right, and I did not notice it.

BTW I see a great deal of:

note(clang): expanded from macro 'XXX'

in the output when macros are bring expanded. While this may be ordinarily
helpful for macro expansion I would like to turn this off by default. How do
I do that ?

I don't think Clang has an option to turn these off (others on this
list please correct me if I'm wrong), but there is an option to limit
the length of the backtrace: -fmacro-backtrace-limit. This is not
currently exposed in clang-cl though :confused:

Please consider some clang-cl option to control this. Voluminous macro expansion messages make looking at the output results difficult. I would normally want to see warnings/errors and nothing else.