mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 03:39:43 -06:00
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
38 lines
772 B
C++
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 };
|
|
}
|