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

Compile errors with iosfwd.h and Visual Studio 2019 Preview #183

Closed
jseward opened this issue Feb 7, 2019 · 14 comments
Closed

Compile errors with iosfwd.h and Visual Studio 2019 Preview #183

jseward opened this issue Feb 7, 2019 · 14 comments

Comments

@jseward
Copy link

jseward commented Feb 7, 2019

Description

Tests involved a CHECK on std::string values will not compile in Visual Studio 2019 preview. It appears this is because <string> in this version does not drag in <ostream> anymore.

Steps to reproduce

  1. Install Visual Studio 2019
  2. Add (or overwrite an existing) example:
#include <doctest/doctest.h>

DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
#include <string>
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END

TEST_CASE("will not compile in VS2019") {
    CHECK(std::string("foo") == std::string("bar"));
}
  1. Compile to get the following error
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xstring(383): error C2027: use of undefined type 'std::basic_ostream<char,std::char_traits<char>>'
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\iosfwd(212): note: see declaration of 'std::basic_ostream<char,std::char_traits<char>>'
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xstring(4285): note: see reference to function template instantiation 'std::basic_ostream<char,std::char_traits<char>> &std::_Insert_string<char,std::char_traits<char>,unsigned __int64>(std::basic_ostream<char,std::char_traits<char>> &,const _Elem *const ,const _SizeT)' being compiled
1>        with
1>        [
1>            _Elem=char,
1>            _SizeT=unsigned __int64
1>        ]
1>C:\dev\sins2\src\external\doctest\doctest.h(794): note: see reference to function template instantiation 'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>,std::allocator<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)' being compiled
1>C:\dev\sins2\src\external\doctest\doctest.h(839): note: see reference to function template instantiation 'doctest::String doctest::detail::StringMakerBase<true>::convert<T>(const T &)' being compiled
1>        with
1>        [
1>            T=std::string
1>        ]
1>C:\dev\sins2\src\external\doctest\doctest.h(993): note: see reference to function template instantiation 'doctest::String doctest::toString<L>(const T &)' being compiled
1>        with
1>        [
1>            L=std::string,
1>            T=std::string
1>        ]
1>C:\dev\sins2\src\external\doctest\doctest.h(1141): note: see reference to function template instantiation 'doctest::String doctest::detail::stringifyBinaryExpr<std::string,char[3]>(const L &,const char *,const R (&))' being compiled
1>        with
1>        [
1>            L=std::string,
1>            R=char [3]
1>        ]
1>C:\dev\sins2\src\test\engine\string\test_to_string.cpp(8): note: see reference to function template instantiation 'doctest::detail::Result doctest::detail::Expression_lhs<const std::string &>::operator ==<char[3]>(const R (&))' being compiled
1>        with
1>        [
1>            R=char [3]
1>        ]
1>C:\dev\sins2\src\test\engine\string\test_to_string.cpp(8): note: see reference to function template instantiation 'doctest::detail::Result doctest::detail::Expression_lhs<const std::string &>::operator ==<char[3]>(const R (&))' being compiled
1>        with
1>        [
1>            R=char [3]
1>        ]

Extra information

`/showIncludes' for VS2017 (will compile)

1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\string
1>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\istream
1>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ostream
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ios
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocnum
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\climits
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\yvals.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\yvals_core.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xkeycheck.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\crtdefs.h
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime.h
1>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\sal.h
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\concurrencysal.h
1>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vadefs.h
1>Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\crtdbg.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime_new_debug.h
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime_new.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\use_ansi.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\limits.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cmath
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cstdlib
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdlib.h
1>Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_malloc.h
1>Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_search.h
1>Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stddef.h
1>Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstdlib.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\math.h
1>Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_math.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xtgmath.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xtr1common
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cstdio
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdio.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstdio.h
1>Note: including file:         C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_stdio_config.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\streambuf
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xiosbase
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cstring
1>Note: including file:          C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\string.h
1>Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_memory.h
1>Note: including file:            C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_memcpy_s.h
1>Note: including file:             C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\errno.h
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime_string.h
1>Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstring.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\stdexcept
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\exception
1>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\type_traits
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xstddef
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cstddef
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\initializer_list
1>Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\malloc.h
1>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime_exception.h
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\eh.h
1>Note: including file:             C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_terminate.h
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xstring
1>Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xmemory0
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cstdint
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\stdint.h
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\limits
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ymath.h
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cfloat
1>Note: including file:              C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\float.h
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cwchar
1>Note: including file:              C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\wchar.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wconio.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wctype.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wdirect.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wio.h
1>Note: including file:                C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_share.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wprocess.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wtime.h
1>Note: including file:               C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\sys/stat.h
1>Note: including file:                C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\sys/types.h
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\new
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xutility
1>Note: including file:             C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\utility
1>Note: including file:              C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\iosfwd
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xatomic0.h
1>Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\intrin0.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\typeinfo
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\vcruntime_typeinfo.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocinfo
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocinfo.h
1>Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\ctype.h
1>Note: including file:           C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\locale.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\memory
1>Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xmemory
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xfacet
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\system_error
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\cerrno
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xcall_once.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xerrc.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\share.h
1>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xstring_insert.h
1>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xpolymorphic_allocator.h
1>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\tuple

`/showIncludes' for VS2019 Preview (will NOT compile)

1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\string
1>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xstring
1>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\iosfwd
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\yvals.h
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\yvals_core.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\crtdefs.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vcruntime.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\sal.h
1>Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\concurrencysal.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vadefs.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xkeycheck.h
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\crtdbg.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vcruntime_new_debug.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vcruntime_new.h
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\use_ansi.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cstdio
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdio.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstdio.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_stdio_config.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cstring
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\string.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_memory.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_memcpy_s.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\errno.h
1>Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vcruntime_string.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstring.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cwchar
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\wchar.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wconio.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wctype.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wdirect.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wio.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_share.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wprocess.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wstdlib.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_wtime.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\sys/stat.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\sys/types.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xstddef
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cstddef
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stddef.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xtr1common
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cstdlib
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\math.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_math.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\stdlib.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_malloc.h
1>Note: including file:       C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_search.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\limits.h
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\initializer_list
1>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xmemory0
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cstdint
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\stdint.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\limits
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cfloat
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\float.h
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\climits
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\new
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\exception
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\type_traits
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\malloc.h
1>Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\vcruntime_exception.h
1>Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\eh.h
1>Note: including file:        C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\corecrt_terminate.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xutility
1>Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\utility
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xatomic0.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\intrin0.h
1>Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\xpolymorphic_allocator.h
1>Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\tuple
1>Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.20.27305\include\cctype
1>Note: including file:   C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\ctype.h
@onqtam
Copy link
Member

onqtam commented Feb 7, 2019

Hi!

I'll try to get to this when I can, but for now I'd recommend including whatever STL headers are necessary to make things compile.

Thanks for reporting!

@jseward
Copy link
Author

jseward commented Feb 7, 2019

Thanks @onqtam , that is indeed the route I have currently picked (just adding extra #include <ostream> in my test files).

@onqtam
Copy link
Member

onqtam commented Feb 7, 2019

But on the top of my head - actually <string> should provide ostream& operator<<(ostream& ... - <iosfwd> has nothing to do with operator<< - only with forward declaring ostream (basic_ostream)...

template<class charT, class traits, class Allocator>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const basic_string<charT, traits, Allocator>& str);

as seen here: https://en.cppreference.com/w/cpp/header/string

So I'm a bit clueless as to why this could have happened. But anyway I'll try VS 2019 when I get the chance.

@onqtam
Copy link
Member

onqtam commented Mar 23, 2019

So I played a bit with VS 2019 and turns out this is an STL bug. The user should be able to do the following:

#include <string>
#include <iosfwd>

void foo(std::ostream& s) {
    s << std::string("");
}

But with VS 2019 that is no longer possible. This is valid code since operator<< for std::string uses std::ostream only by reference so we do not need the definition of std::ostream but internals of the <xstring> header (included by <string>) start using parts of std::ostream. I see that they changed from including <istream> and <ostream> to just including <iosfwd> which is not sufficient in this case.

There is nothing I'm willing to do on the side of doctest because there are only 2 options: either disable detection for operator<< for std::string (which would need to be forward declared as a type - which would be horrendous) so your std::string asserts won't print the contents of the string, or doctest has to include a header, which is a clear no (because of compile times).

Here is the bug report I just filed:
https://developercommunity.visualstudio.com/content/problem/503648/simple-code-no-longer-compiles-when-using-and-stdo.html

For now I would advise to just include <ostream> wherever asserts using std::string cannot compile.

@jseward
Copy link
Author

jseward commented Apr 9, 2019

Thanks @onqtam , checked on the bug report, interesting chain of events and reasoning. fwiw I tend to agree with Billy O'Neal's assessment of the issue. It looks like this will require a change to doctest as it would be very unfortunate if out of the box experience with vs2019 and onward was unfriendly. Thanks again for the great library.

@onqtam
Copy link
Member

onqtam commented Apr 11, 2019

It's the right decision for Visual Studio indeed - it's a very niche problem - probably one that only doctest encounters. I'm really reluctant to adding an include just for this though... So I'll have to think about this - don't expect a resolution soon - sorry :|

@jseward
Copy link
Author

jseward commented Apr 11, 2019

No worries at all, I've worked around it for now and have no other issues!

@theodelrieu
Copy link

I had the same problem building on macOS 10.14, note that it works in Debug mode, but fails in Release.

A quick look in libc++ files shows that the operator<<(basic_ostream&, std::basic_string) is defined in <ostream>...

@atimholt
Copy link

I’m using VS2019. The posted solution (manually including in every test cpp file, tried before and after "doctest.h") fixes some errors, but I still get error lnk2001:

common_factor.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) operations.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) unrepresentable_operation_error.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) Direction.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) FixedRational.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) Matrix.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) Point.test.cpp.1.o : error LNK2001: unresolved external symbol "public: void __cdecl doctest::detail::ResultBuilder::unexpectedExceptionOccurred(void)" (?unexpectedExceptionOccurred@ResultBuilder@detail@doctest@@QEAAXXZ) C:\Users\atimh\code\rational_geometry\bin\rational_geometry_test.exe : fatal error LNK1120: 1 unresolved externals

@onqtam
Copy link
Member

onqtam commented May 26, 2019

@atimholt judging by the linker errors I would say the reason is that you have forgotten to implement the test runner using either DOCTEST_CONFIG_IMPLEMENT or DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN - one of these 2 identifiers must be defined in exactly one .cpp file before including the framework header because doctest.h is actually a header file and a .cpp file bundled together in a single header file, and the .cpp part needs to be compiled somewhere - checkout the relevant docs for supplying your own main.

@atimholt
Copy link

Actually, I’m just a moron. Didn’t put #include <ostream> in my main test file (tests.cpp), just every other file. Takeaway is, put #include <ostream> in every file that has #include "doctest.h".

atimholt added a commit to atimholt/rational_geometry that referenced this issue May 26, 2019
@onqtam
Copy link
Member

onqtam commented Jun 2, 2019

@theodelrieu are you sure you had the same problem on OSX? Was it a compiler error or was it a linker error like reported here: #126 ...? If your problem is a linker error perhaps you might try the dev branch - I just pushed a fix recently for #126.

You mentioned that the failure is only in Release - that could be precisely the same issue which agurtovoy reported here: #126 (comment)

onqtam added a commit that referenced this issue Jun 2, 2019
@onqtam
Copy link
Member

onqtam commented Jun 2, 2019

I just pushed a fix for this in the dev branch - will release in an official version soon: 1fe42c9

@onqtam onqtam closed this as completed in 1ea9144 Jun 2, 2019
@theodelrieu
Copy link

Looks like the same problem indeed.

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

4 participants