
The only reason this failed to compile on VS 2013 was because the compiler uses different initializer_list constructor argument types than our dummy implementation. The standard does not specify the non-default constructor argument types for initializer_list. Use a template to match any two-arg constructor a compiler might select (e.g. begin/end or begin/len). Use #error to preserve the error on VS 2013.
29 lines
518 B
C++
29 lines
518 B
C++
#if defined(_MSC_VER) && _MSC_VER == 1800
|
|
# error "VS 2013 does not safely support this"
|
|
#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_;
|
|
public:
|
|
template <typename T1, typename T2>
|
|
initializer_list(T1, T2) {}
|
|
};
|
|
}
|
|
|
|
template <typename T>
|
|
struct A
|
|
{
|
|
A(std::initializer_list<T>) {}
|
|
};
|
|
|
|
void someFunc()
|
|
{
|
|
A<int> as = { 1, 2, 3, 4 };
|
|
}
|