Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

googletest on Visual Studio 2012 RC on Windows 8 RC does not compile #412

Closed
GoogleCodeExporter opened this issue Jul 28, 2015 · 30 comments
Closed

Comments

@GoogleCodeExporter
Copy link
Contributor

I would like to request that the team supports Windows 8 RC.  I know that 
Windows 8 RC is not a release from Microsoft.  However, being able to support 
developers working on the Windows 8 platform would be really nice.  Currently, 
trying to even compile gtest on Windows 8 fails.  I detail the problems below.  

What steps will reproduce the problem?
1.  Loading the solution with Visual Studio 2012 RC on Windows 8 RC Build 8400 
will cause the solution to be converted to Visual Studio 2012 v110 code 
generation.
2.  Upon attempting to build gtest a number of compiler issues occur.  All of 
the errors occur in gtest-param-util-generated.h related to templates.  Visual 
Studio 2012 has an issue with the number of template arguments in 
std::tr1::tuple according to the compiler.

What is the expected output? What do you see instead?
The expected output is that the build is successful.  Instead, I get the 
following output:  

Note: Output has been modified slightly to hide some details unrelated to gtest:

1>\ext\gtest-1.5.0\include\gtest\internal\gtest-param-util-generated.h(4015): 
error C2977: 'std::tuple' : too many template arguments
1>          c:\program files (x86)\microsoft visual studio 
11.0\vc\include\utility(73) : see declaration of 'std::tuple'
1>          
\ext\gtest-1.5.0\include\gtest\internal\gtest-param-util-generated.h(4247) : 
see reference to class template instantiation 
'testing::internal::CartesianProductGenerator9<T1,T2,T3,T4,T5,T6,T7,T8,T9>' 
being compiled
1>c:\users\msfrucht\desktop\win8nfc\win8nfc\c3nfc\ext\gtest-1.5.0\include\gtest\
internal\gtest-param-util-generated.h(4015): error C3203: 'tuple' : 
unspecialized class template can't be used as a template argument for template 
parameter 'T', expected a real type
1>c:\users\msfrucht\desktop\win8nfc\win8nfc\c3nfc\ext\gtest-1.5.0\include\gtest\
internal\gtest-param-util-generated.h(4015): error C2955: 'std::tuple' : use of 
class template requires template argument list
1>          c:\program files (x86)\microsoft visual studio 
11.0\vc\include\utility(73) : see declaration of 'std::tuple'
1>\ext\gtest-1.5.0\include\gtest\internal\gtest-param-util-generated.h(4015): 
error C2955: 'testing::internal::ParamGeneratorInterface' : use of class 
template requires template argument list
1>          \ext\gtest-1.5.0\include\gtest\internal\gtest-param-util.h(141) : 
see declaration of 'testing::internal::ParamGeneratorInterface'
1>\gtest-1.5.0\include\gtest\internal\gtest-param-util-generated.h(4017): error 
C2977: 'std::tuple' : too many template arguments
1>          c:\program files (x86)\microsoft visual studio 
11.0\vc\include\utility(73) : see declaration of 'std::tuple'

What version of Google Test are you using? On what operating system?
I am using Google Test 1.5 on Windows 8 RC Build 8400 x64.

Original issue reported on code.google.com by michaelf...@gmail.com on 4 Jun 2012 at 11:45

@GoogleCodeExporter
Copy link
Contributor Author

The problem is in Visual Studio 2012 RC. Workaround for this is to add a 
preprocessor define _VARIADIC_MAX=10 for the projects using googletest. This 
define could be added to googletest headers (for VC11 compiler specifically) to 
get it to work "out-of-the-box".

More info about the issue: 
http://stackoverflow.com/questions/8274588/c2977-stdtuple-too-many-template-argu
ments-msvc11

Original comment by timo.kam...@tribestudios.com on 8 Jun 2012 at 11:30

@GoogleCodeExporter
Copy link
Contributor Author

I think something like that should be added to CMakeLists.txt instead of 
impacting the source files:

    if( MSVC ) # VS2012 doesn't support correctly the tuples yet
            add_definitions( /D _VARIADIC_MAX=10 )
    endif()

This works perfectly for me. No need to touch the sources. They should be 
independent from this issue.

Original comment by mjklaim@gmail.com on 20 Jul 2012 at 4:06

@GoogleCodeExporter
Copy link
Contributor Author

Just tried to compile Google Test 1.6 with VS2010 RTM; it still fails to build 
due the the reported lack of support for Variadic Templates - the solution 
suggested with regards to _VARIADIC_MAX=10 does not solve the problem either - 
any other suggestions on how to get Google Test running on VS2012?

Original comment by sina.jaz...@gmail.com on 22 Aug 2012 at 5:22

@GoogleCodeExporter
Copy link
Contributor Author

What do you mean it don't solve the problem either? I've been using google test 
on VS2012 for a month using the _VARIADIC_MAX=10 trick.

Original comment by mjklaim@gmail.com on 22 Aug 2012 at 7:57

@GoogleCodeExporter
Copy link
Contributor Author

where did you define  _VARIADIC_MAX=10 ? I tried adding "
_VARIADIC_MAX=10" as a pre processor definition and it made no
difference.

Original comment by sina.jaz...@gmail.com on 26 Aug 2012 at 12:22

@GoogleCodeExporter
Copy link
Contributor Author

Thanks I've now managed to get it to compile using the
_VARIADIC_MAX=10 tirck; the issue I had was caused by forcing GMock to
use it's own version of Tuple library.  Without this, it works fine.
Thanks for your reply.

Original comment by sina.jaz...@gmail.com on 26 Aug 2012 at 12:42

@GoogleCodeExporter
Copy link
Contributor Author

Also an issue with VS2012 Pro on Windows 7 x64 (not only on Windows 8 RC or 
others)

_This issue is only related to VS2012_
all versions of gtest up to 1.6.0 are affected. 
Appending
if( MSVC ) # VS2012 doesn't support correctly the tuples yet
    add_definitions( /D _VARIADIC_MAX=10 )
endif()

to the end of the CMakeLists.txt in gtest/ solves the problem. Please add this 
to FAQ/Instructions and/or fix it.

Original comment by ThEBliZZ...@gmail.com on 4 Sep 2012 at 10:56

@GoogleCodeExporter
Copy link
Contributor Author

Ошибка    4   error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4017
Ошибка    8   error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4030
Ошибка    10  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4035
Ошибка    12  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4042
Ошибка    15  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4044
Ошибка    17  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4077
Ошибка    19  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4119
Ошибка    21  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4123
Ошибка    23  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4204
Ошибка    26  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4256
Ошибка    30  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4270
Ошибка    32  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4275
Ошибка    34  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4282
Ошибка    37  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4284
Ошибка    39  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4320
Ошибка    41  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4366
Ошибка    43  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4370
Ошибка    45  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4456
Ошибка    48  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4738
Ошибка    51  error C3203: tuple: неспециализированный 
класс шаблон нельзя использовать в 
качестве аргумента шаблон для параметра 
шаблон "T", требуется действительный 
тип  gtest\internal\gtest-param-util-generated.h 4782
Ошибка    1   error C2977: std::tuple: слишком много 
аргументов шаблон   gtest\gtest-printers.h  550
Ошибка    2   error C2977: std::tuple: слишком много 
аргументов шаблон   gtest\gtest-printers.h  558
Ошибка    3   error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4017
Ошибка    7   error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4019
Ошибка    25  error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4256
Ошибка    29  error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4258
Ошибка    47  error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4738
Ошибка    50  error C2977: std::tuple: слишком много 
аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4782
Ошибка    14  error C2955: testing::internal::ParamIteratorInterface: для 
использования класса шаблон требуется 
список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4042
Ошибка    36  error C2955: testing::internal::ParamIteratorInterface: для 
использования класса шаблон требуется 
список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4282
Ошибка    6   error C2955: testing::internal::ParamGeneratorInterface: для 
использования класса шаблон требуется 
список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4017
Ошибка    28  error C2955: testing::internal::ParamGeneratorInterface: для 
использования класса шаблон требуется 
список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4256
Ошибка    5   error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4017
Ошибка    9   error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4030
Ошибка    11  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4035
Ошибка    13  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4042
Ошибка    16  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4044
Ошибка    18  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4077
Ошибка    20  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4119
Ошибка    22  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4123
Ошибка    24  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4204
Ошибка    27  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4256
Ошибка    31  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4270
Ошибка    33  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4275
Ошибка    35  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4282
Ошибка    38  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4284
Ошибка    40  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4320
Ошибка    42  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4366
Ошибка    44  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4370
Ошибка    46  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4456
Ошибка    49  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4738
Ошибка    52  error C2955: std::tuple: для использования 
класса шаблон требуется список аргументов 
шаблон    gtest\internal\gtest-param-util-generated.h 4782

Original comment by kolan...@gmail.com on 13 Sep 2012 at 7:03

@GoogleCodeExporter
Copy link
Contributor Author

I am using gtest 1.6.0 ans VS2012. I tried Appending
if( MSVC ) # VS2012 doesn't support correctly the tuples yet
    add_definitions( /D _VARIADIC_MAX=10 )
endif()

to the end of the CMakeLists.txt It does not work. I have also tried defining 
_VARIADIC_MAX to 10 to top of gtest.h 
 #deifne _VARIADIC_MAX 10
It didnt work either. Also I got compilation warning saying "_VARIADIC_MAX' : 
macro redefinition" 
How to fix this issue? Where exactly i need to add a preprocessor define 
_VARIADIC_MAX=10 and how?

Original comment by vaidehi....@gmail.com on 27 Sep 2012 at 6:50

@GoogleCodeExporter
Copy link
Contributor Author

You have to do it before the gtest cmake files is processed. For me I use 
add_directory(gtest) in my cmake file (with gtest being a sub directory where 
gtest is), so I do it just before that and it works fine.

Original comment by mjklaim@gmail.com on 27 Sep 2012 at 8:03

@GoogleCodeExporter
Copy link
Contributor Author

I tried adding it before this line in CMakeList file.
include(cmake/hermetic_build.cmake OPTIONAL)
I also tried adding it before
include(cmake/internal_utils.cmake)

But still same issue. Please look into the attached CMakeList file and let me 
know where exactly i can place this code.
    if( MSVC ) # VS2012 doesn't support correctly the tuples yet
            add_definitions( /D _VARIADIC_MAX=10 )
    endif()

My gtest code is under src\gtest . There is no sub folder gtest(like 
src\gtest\gtest)

Original comment by vaidehi....@gmail.com on 27 Sep 2012 at 8:40

Attachments:

@GoogleCodeExporter
Copy link
Contributor Author

I have also tried removing this code from CMakeLists.

  if (NOT MSVC OR NOT MSVC_VERSION EQUAL 1600)
    # The C++ Standard specifies tuple_element<int, class>.
    # Yet MSVC 10's <utility> declares tuple_element<size_t, class>.
    # That declaration conflicts with our own standard-conforming
    # tuple implementation.  Therefore using our own tuple with
    # MSVC 10 doesn't compile.
    cxx_library(gtest_main_use_own_tuple "${cxx_use_own_tuple}"
      src/gtest-all.cc src/gtest_main.cc)

    cxx_test_with_flags(gtest-tuple_test "${cxx_use_own_tuple}"
      gtest_main_use_own_tuple test/gtest-tuple_test.cc)

    cxx_test_with_flags(gtest_use_own_tuple_test "${cxx_use_own_tuple}"
      gtest_main_use_own_tuple
      test/gtest-param-test_test.cc test/gtest-param-test2_test.cc)
  endif()

Still facing compilation issue. Please let me know where i am going wrong.

Original comment by vaidehi....@gmail.com on 28 Sep 2012 at 2:49

@GoogleCodeExporter
Copy link
Contributor Author

Also i cannot compile GTest with VisualStudio 2012 on Windows 8 Pro...

Original comment by kosmonaFFFt@gmail.com on 1 Feb 2013 at 4:30

@GoogleCodeExporter
Copy link
Contributor Author

same here.
since when variadic templates are supported in VS12?
is it part of CTP2? cause they weren't working before anyway anyhow.
so this makes officially support for WIN non-existing since MS finally support 
the feature?

anywork around? 

Original comment by pip...@gmail.com on 13 Mar 2013 at 10:30

@GoogleCodeExporter
Copy link
Contributor Author

or you can go to Project->properties->c/c++->commandline, and add /D 
_VARIADIC_MAX=10 to [Additional options]

Original comment by wangziju...@gmail.com on 4 Jun 2013 at 2:21

@GoogleCodeExporter
Copy link
Contributor Author

Issue 437 has been merged into this issue.

Original comment by vladlosev on 19 Jul 2013 at 8:06

@GoogleCodeExporter
Copy link
Contributor Author

Hi All,
I am planning to have a single test runner for cross platform. I got to know 
google test has compatibility issues with Windows 8. However am using VS2012 
Pro and Windows 8 Pro. could you please update the form if the issue is 
resolved?

Original comment by luckyroc...@gmail.com on 16 Aug 2013 at 5:01

@GoogleCodeExporter
Copy link
Contributor Author

[deleted comment]

@GoogleCodeExporter
Copy link
Contributor Author

Can any of the developers enlighten me as to why this SIMPLE fix did not make 
it into release 1.7.0? This is a serious issue, a showstopper for any windows 
plattform.

What version of Google Test are you using? On what operating system?
Google Test 1.6.0 OR Google Test 1.7.0 (both are affected)
Microsoft Visual Studio Professional 2012
Version 11.0.60610.01 Update 3
Microsoft .NET Framework
Version 4.5.50709
Installed Version: Professional

For anyone still asking how to fix this:
 - Open CMakeLists.txt located at /gtest-1.7.0/CMakeLists.txt
 - Append the following three lines to the file (appending means: scroll to the end, make a new, empty line and paste):
if( MSVC ) # VS2012 does not support tuples correctly yet
    add_definitions( /D _VARIADIC_MAX=10 )
endif()
 - Save and rerun CMake. Done.

Original comment by ThEBliZZ...@gmail.com on 20 Sep 2013 at 4:34

@GoogleCodeExporter
Copy link
Contributor Author

For what it's worth, the fix ("if (MSVC) add_definitions( /D _VARIADIC_MAX=10 ) 
endif()") works for me with GTest 1.7.0 if I add the code snippet at the very 
end of the CMakeLists.txt file, as suggested in another comment. It did not 
work if I added the code at the beginning of the file. So the position is 
important. In my case, I simply compiled the GTest solution file produced by 
CMake; in other words, I'm compiling GTest in isolation, and not as part of a 
separate project.

Original comment by virid...@gmail.com on 29 Nov 2013 at 8:30

@GoogleCodeExporter
Copy link
Contributor Author

[deleted comment]

@GoogleCodeExporter
Copy link
Contributor Author

Fixed in r675.

Original comment by ko...@google.com on 13 Jan 2014 at 10:53

@GoogleCodeExporter
Copy link
Contributor Author

It should be noted that the fix described in this thread does not work for 
anyone not using CMake (trying to open the solution in the IDE).

To apply this fix in the project files:
1) Open gtest.sln (convert when prompted)
2) Open each individual project properties (Solution Explorer -> right-click -> 
properties)...There are 4 projects total (gtest, gtest_main, gtest_prod_test, 
gtest_unittest)
3) Add ;_VARIADIC_MAX=10 to the end of the Preprocessor Definitions 
(Configureation Properties -> C/C++ -> Preprocessor) for each of the projects 
mentioned in step 2.
4) Rebuild solution.

There are still a few warnings spit out by the compiler but at least it builds.

Original comment by kinar...@gmail.com on 18 Mar 2014 at 6:08

@GoogleCodeExporter
Copy link
Contributor Author

I've just checkout a few seconds ago and it does not compile on Visual Studio 
2012.

Original comment by demelier...@gmail.com on 3 Oct 2014 at 6:33

@KindDragon
Copy link
Contributor

Can be closed now, especially after PR #723

@sdok
Copy link

sdok commented Apr 5, 2016

You need to add this snippet
if( MSVC ) # VS2012 doesn't support correctly the tuples yet
add_definitions( /D _VARIADIC_MAX=10 )
endif()
before
#Add sub-directories comment line of CmakeLists.txt

@KindDragon
Copy link
Contributor

It is already has

if (MSVC AND MSVC_VERSION EQUAL 1700)
add_definitions(/D _VARIADIC_MAX=10)
endif()

@limdor
Copy link

limdor commented Jun 20, 2017

I've just checkout from the master branch and I'm experiencing the same problem:
What version of Google Test are you using? On what operating system?
Google Test master branch
CMake 3.8.2
MSVC 17.0.61030.0
Microsoft (R) Build Engine version 4.6.1055.0
Microsoft .NET Framework, version 4.0.30319.42000
Windows 7 Ultimate Service Pack 1

@limdor
Copy link

limdor commented Jun 20, 2017

I've found why, it was because I was building from a parent directory. As soon I've added the snippet code into the parent makefile then it worked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants
@KindDragon @limdor @GoogleCodeExporter @gennadiycivil @sdok and others