Files
CMake/Tests/CompileFeatures/cxx_generalized_initializers.cpp
Brad King fc96d99c3e Features: Record initializer list support for Intel 14 and above
Features recorded by commit v3.6.0-rc1~120^2~5 (Features: Record
standards and features for Intel C++ on UNIX, 2016-04-28) for the Intel
compiler left out initializer list support because our test case in
`Tests/CompileFeatures/cxx_generalized_initializers.cpp` caused an
internal compiler error.  It turns out this is because the Intel
compiler asserts the `initializer_list` constructor signatures to verify
that they match its own `<initializer_list>` header.  It was our dummy
implementation used to test the language feature without any headers
that caused the ICE.  Revise it to use a constructor signature accepted
by the Intel compiler.

Fixes: #17829
2018-03-16 07:47:42 -04:00

38 lines
772 B
C++

#if defined(_MSC_VER) && _MSC_VER == 1800 && _MSC_FULL_VER < 180030723
#error "VS 2013 safely supports this only with Update 3 or greater"
#endif
// Dummy implementation. Test only the compiler feature.
namespace std {
typedef decltype(sizeof(int)) size_t;
template <class _E>
class initializer_list
{
const _E* __begin_;
size_t __size_;
#ifdef __INTEL_COMPILER
// The Intel compiler internally asserts the constructor overloads, so
// reproduce the constructor used in its <initializer_list> header.
initializer_list(const _E*, size_t) {}
#else
public:
template <typename T1, typename T2>
initializer_list(T1, T2)
{
}
#endif
};
}
template <typename T>
struct A
{
A(std::initializer_list<T>) {}
};
void someFunc()
{
A<int> as = { 1, 2, 3, 4 };
}