Я использую сообщество msvc 2017.Когда я тестирую следующий код:
#include<functional>
using namespace std;
template<class T>
void UseArray(
T (&arr)[10]) {
arr[0] = 0;
}
template<class T>
void UseFunction(
function<bool(T, T)> para = [](T x, T y) { return x == y; }) {
para(1, 2);
}
template<class T>
void UseArrayAndFunction(
T (&arr)[10], // <-- All errors are here
function<bool(T, T)> para = [](T x, T y) { return x == y; } ) {
arr[0] = 0;
para(1, 2);
}
int main() {
int arr[10];
UseArray<int>(arr);
UseFunction<int>();
UseArrayAndFunction<int>(arr);
return 0;
}
Первые две функции в порядке, но последняя имеет следующие ошибки (все находятся в 18-й строке):
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2065: 'arr': undeclared identifier
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2275: 'std::function<bool(T,T)>': illegal use of this type as an expression
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(12): note: see declaration of 'std::function<bool(T,T)>'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2146: syntax error: missing ')' before identifier 'para'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2143: syntax error: missing ';' before '{'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2143: syntax error: missing ')' before ';'
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(18): error C2447: '{': missing function header (old-style formal list?)
1>d:\documents\visual studio 2017\projects\cpptest3\cpptest3\main.cpp(19): error C2059: syntax error: ')'
МожетВы скажете мне, что вызывает эти ошибки?