
The following doesnt work though ( nor with the std:: versions of the Concepts) Output is : test.cpp: In function 'T sum(T*, int)': test.cpp:28: error: no match for 'operator=' in 'result = Addable<T>::operator+(result, array[i])' test.cpp:19: note: candidates are: typename Assignable<T>::result_type Assignable<T>::operator=(T&, const T&) ---------------------------------- #include <concepts> #include <iostream> #if (0) //Works auto concept Addable<typename T> { T operator+(T x, T y); }; #else // Fails auto concept Addable<typename T> { typename result_type; result_type operator+(T x, T y); }; #endif auto concept Assignable<typename T> { typename result_type; result_type operator=(T& x, T y); }; template<std::CopyConstructible T> where Addable<T> && Assignable<T> T sum(T array[], int n) { T result = T(0); for (int i = 0; i < n; ++i) result = result + array[i]; return result; } int main() { int arr[3] = {1,2,3}; std::cout << sum(arr, 3); return 0; } regards Andy Little