Strategy design pattern in C++ using unique_ptr
This looks like a standard use of PIMPL.  Is that all the member functions you need?  If just 2 or 3, just manually forwarding each one is fine.

Does the Activation class do anything besides have those forwarding functions?  If not, don’t bother with the wrapper and forwarding at all!  Just make an instance of the concrete class and use it.  (If there are other functions, see if they can simply be non-virtual in the base and inherited)



Correct, unique_ptr has a destructor — that is part of its defining nature.  Don’t write one for the class, and the compiler knows it should just call the destructors of all the members.



The usage is a little clumsy:

Neuron n( std::make_unique&lt;Identity&gt;() );


How about adding a wrapper so you can write

auto n = Neuron_with&lt;Identity&gt;();




As a matter of style, leading underscores are generally criticized here.  Some compilers had and still support special keywords and extensions in this format.  You have to remember to never use a capital initial letter after the underscore.

It is perfectly OK and idiomatic to just name the constructor arguments the same as the members.