Unknown compiler version while compiling Boost with MSVC 14.0 (VS 2015)

C++BoostVisual Studio-2015

C++ Problem Overview


I get "Unknown compiler version - please run configure tests and report the results" while attempting to compile Boost library on my computer.
I have most recent Boost (as of date of the post) - 1.58.0.
Doesn't Boost support MSVC 14.0, yet? How do I "run the configure tests"?

Screenshots.

C++ Solutions


Solution 1 - C++

Latest (at the time of posting this answer) Boost 1.58 does support MSVC 14.0 Preview which was the latest MS compiler at the time of Boost 1.58 release. Now, the latest version of Visual Studio is 2015 RC which isn't covered in the boost 1.58 config file.

To stop Boost 1.58 complaining about unknown compiler version edit boost/config/compiler/visualc.hpp and replace:

// last known and checked version is 19.00.22129 (VC14 Preview):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190022310)

with:

// last known and checked version is 19.00.22816 (VC++ 2015 RC):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190022816)

which you can find is already done in boost repo here for upcoming Boost 1.59 release.

Update: For Visual Studio 2015 RTM set it to:

// last known and checked version is 19.00.23026 (VC++ 2015):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023026)

Update2: For Visual Studio 2015 Update 1 set it to:

// last known and checked version is 19.00.23506 (VC++ 2015 Update 1):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023506)

Also if you have previously been running Boost.Build on toolset=msvc-14.0 then delete from C:\Users\<name>\AppData\Local\Temp the following cached files:

b2_msvc_14.0_vcvarsall_x86.cmd 
b2_msvc_14.0_vcvarsall_x86_amd64.cmd 
b2_msvc_14.0_vcvarsall_x86_arm.cmd

More about that here.

Update3 For future reference, in your Visual Studio Tools Command Prompt run the command cl /Bv to see your version numbers (the parameters are case sensitive).

Mine outputs the following:

C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c1.dll:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c1xx.dll:      Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c2.dll:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\link.exe:      Version 14.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\mspdb140.dll:  Version 14.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\1033\clui.dll: Version 19.11.25506.0

From this you can deduce the _MSC_VER is 1911 (from the text "Version 19.11") and the _MSC_FULL_VER is 191125506.

Solution 2 - C++

Edit boost/config/compiler/visualc.hpp and replace the test about the last known and checked version with one of the following line:

  1. If you want to deactivate completely the version check:

    #if 0

  2. If you want to check the major version only (select a single line):

    #if (_MSC_VER > 1900) // Visual Studio 2015 #if (_MSC_VER > 1911) // Visual Studio 2017 15.0, 15.1 and 15.2 #if (_MSC_VER > 1911) // Visual Studio 2017 15.3 and 15.4 #if (_MSC_VER > 1912) // Visual Studio 2017 15.5 #if (_MSC_VER > 1913) // Visual Studio 2017 15.6 #if (_MSC_VER > 1914) // Visual Studio 2017 15.7 #if (_MSC_VER > 1915) // Visual Studio 2017 15.8 #if (_MSC_VER > 1916) // Visual Studio 2017 15.9 #if (_MSC_VER > 1920) // Visual Studio 2019 16.0

  3. If you want to check both the major and minor version (select a single line):

    #if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023506) // Visual Studio 2015 Update 1 #if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023918) // Visual Studio 2015 Update 2 #if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023918) // Visual Studio 2015 Update 3 #if (_MSC_VER > 1910 && _MSC_FULL_VER > 191025017) // Visual Studio 2017 15.0, 15.1 and 15.2 #if (_MSC_VER > 1911 && _MSC_FULL_VER > 191125542) // Visual Studio 2017 15.3 and 15.4 #if (_MSC_VER > 1912 && _MSC_FULL_VER > 191225835) // Visual Studio 2017 15.5 #if (_MSC_VER > 1913 && _MSC_FULL_VER > 191326132) // Visual Studio 2017 15.6 #if (_MSC_VER > 1914 && _MSC_FULL_VER > 191426433) // Visual Studio 2017 15.7 #if (_MSC_VER > 1915 && _MSC_FULL_VER > 191526726) // Visual Studio 2017 15.8 #if (_MSC_VER > 1916 && _MSC_FULL_VER > 191627030) // Visual Studio 2017 15.9 #if (_MSC_VER > 1920 && _MSC_FULL_VER > 192027508) // Visual Studio 2019 16.0

Solution 3 - C++

In general, open boost/config/compiler/visualc.hpp and hover the mouse over _MSC_FULL_VER to see the version installed on your environment.

Solution 4 - C++

Now using the fully released version of msvc-14.0 (Visual Studio 2015), you can use this:

#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023026)

Is there any danger is this? Should we instead wait for the next release of Boost that has been officially edited to have this value?

Solution 5 - C++

I have tried the following code in Ogre 1.9 - Visual Studio 2015.

Last known and checked version is 19.00.23506 (VC++ 2015 Update 1)

if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023506)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOmegaExternView Question on Stackoverflow
Solution 1 - C++doqtorView Answer on Stackoverflow
Solution 2 - C++ArnaudView Answer on Stackoverflow
Solution 3 - C++rkellermView Answer on Stackoverflow
Solution 4 - C++MattView Answer on Stackoverflow
Solution 5 - C++Atdhe KurteshiView Answer on Stackoverflow