{ quoted server banner and signature redacted by mod. -mod }
Obviously, the example below is a contrived for simplicity. The operator in
my
actual code makes domain-specific sense.
Essentially what I am trying to achieve a policy-based design for operators
where the template parameter k is a policy-related value.
In the code I want to keep the original `cout` line unchanged and only
change the way the operator function behaves when brought into scope.
Adi
On Wednesday, April 27, 2016 at 9:10:10 PM UTC+3, Adi Shavit wrote:
> { edited by mod to shorten lines to ~70 characters. -mod }
>
> Hi,
>
> The following code (
http://ideone.com/e.js/6pTF0n) works fine:
>
> #include <iostream>
>
> struct A
> {
> int v = 3;
> };
>
>
> namespace Foo
> {
> template <int k=11> // note the default value of 11
> int operator+(A const& rhs, A const& lhs)
> {
> return rhs.v + lhs.v + k;
> }
> }
>
> using Foo::operator+; // will use k == 11
>
>
> using namespace std;
> int main()
> {
>
> A a1, a2;
>
> cout << a1 + a2 << endl;
>
> return EXIT_SUCCESS;
> }
>
>
> The templated overloaded operator+ is brought into ADL scope with the
> `using` clause and when used the default template value of 11 is used
> to produce 3+3+11 = 17.
>
> My question is how do I set a different k value, presumable where the
> using clause is, so that the + syntax remains unchanged?
>
> Thanks!