Какое будет поведение следующей программы

#include <iostream> 
using namespace std; 
 
template <typename T> void foo(T& a, T b = T()) 
{ 
    cout<<"a = "<<a<<", b = "<<b<<endl; 
} 
 
int main() { 
    foo(3); 
    return 0; 
} 
Выведет a = 3, b = 0
Выдаст ошибку компиляции по первому аргументу
Выдаст ошибку компиляции по второму аргументу
Выдаст ошибку выполения
Выведет a = 3, b =