A Red-Black Tree implementation using smart pointers