General Question: Without going into whether or not it's a good idea, how can I add an implicit conversion operator to a class that has already been defined? For example, let's say that I want unique_ptr<T> to implicitly convert to T*, but I can't just add a member conversion operator because I can't change the definition of the unique_ptr class.
Options:
- Is there some c++ voodoo that I can use to make this happen without creating a member function? 
 Answer-So-Far: NO.
 There is no way to add an implicit conversion away from a type that you can't modify in code.
 Just ... sadness.
- Could I derive from std::unique_ptr and add my own member conversion function? Are there any serious downsides to this? 
 Answer-So-Far: Yes (from vsoftco)
 Downsides are yet to be determined. So far inheriting from std::unique_ptr, inheriting its constructors, and declaring an implicit conversion operator has worked splendidly with hardly any code needing to be written.
- Am I just going to have to live without this the rest of my life? 
 Answer-So-Far: We'll see...
 If I can get option 2 up and running without any serious side-effect or burdens, I'll test it out for a while and report back on whether I think it's worth it. We'll see!
Example code:
#include <algorithm>
#include <memory>
#include <vector>
struct MyClass
{
    MyClass(int v) : value(v) {}
    int value;
};
int main()
{
    auto vec = std::vector<std::unique_ptr<MyClass>>();
    vec.push_back(std::make_unique<MyClass>(1));
    vec.push_back(std::make_unique<MyClass>(2));
    // error C2664: 'void (__vectorcall *)(MyClass *)' : cannot convert argument 1 from 'std::unique_ptr<MyClass,std::default_delete<_Ty>>' to 'MyClass *'
    std::for_each(std::begin(vec), std::end(vec), [](MyClass* myClass)
    {
        myClass->value += 3;
    });
}
 
    