I have a templated class where most methods are defined inside the class so they can be inlined. In the following example, I show a copy constructor, but it could be anything.

```
template <typename T>
class Vector {
private:
    ...
public:
    Vector(const Vector& v) {
        if (condition) {
            call_1(...);
        } else {
            call_2(...);
        }
    }
};

```

In this constructor, `condition` is almost always true, therefore I want to give the compiler all the hints so it inlines `call_1` but not `call_2` (I want to prevent code bloat). I have two questions:

1. At first, I was thinking to define `call_1` and `call_2` as methods for the object and define `call_1` inside the class and `call_2` outside the class. Is there anything else I could do to help the compiler?
2. What can I do if I want `call_1` and `call_2` to be shared by many different classes and therefore define them as functions outside the class?

Thanks.