在以下模板类定义中,为什么不拒绝初始化程序?
#include <cstdlib>
template <size_t S>
struct Have_ref {
Have_ref(int& x, int(&arr)[S]) : x{x}, arr{arr} {};
int& x{}; // compiles in VS2015 and gcc. Rejected by Clang
int(&arr)[S] {}; // compiles in VS2015, gcc and Clang
};
//struct Have_ref2 {
// Have_ref2(int& x, int(&arr)[5]) : x{x}, arr{arr} {};
// int& x{}; // error: invalid intitialization
// int(&arr)[5] {}; // error: invalid initialization
//};
int main()
{
int x{};
int arr[5];
Have_ref<5>{x,arr};
}