битовое поле в разрешении перегрузки для шаблона

Кто-нибудь знает, почему первая программа компилируется, а вторая нетт? Единственное отличие состоит в том, что первый использует нормальную функцию, а второй использует шаблонную функцию. Почему разрешение перегрузки ведет себя по-разному в битовом поле для шаблонной и не шаблонной функции?

Пожалуйста, обратитесь к пунктам в стандарте при ответе. Благодарю.

a.cpp

struct X {
  int x : 20;
  int y : 12;
};

void f(const int& x) {}

void f(int&& x) {}

int main() {
  X x;
  f(x.x);
}

b.cpp

struct X {
  int x : 20;
  int y : 12;
};

template 
void f(T&& x) {}

template 
void f(const T& x) {}

int main() {
  X x;
  f(x.x);
}

Ошибки компилятора:

[hidden]$ g++ -v 2>&1 | tail -n 1
gcc version 4.7.2 20120921 (Red Hat 4.7.2-2) (GCC)
[hidden]$ clang++ -v 2>&1 | head -n 1
clang version 3.3
[hidden]$ g++ -std=c++11 a.cpp
[hidden]$ g++ -std=c++11 b.cpp
b.cpp: In function ‘int main()’:
b.cpp:14:8: error: cannot bind bitfield ‘x.X::x’ to ‘int&’
[hidden]$ clang++ -std=c++11 a.cpp
[hidden]$ clang++ -std=c++11 b.cpp
b.cpp:14:5: error: non-const reference cannot bind to bit-field 'x'
  f(x.x);
    ^~~
b.cpp:2:7: note: bit-field is declared here
  int x : 20;
      ^
1 error generated.

Ответы на вопрос(1)

Ваш ответ на вопрос