I'd like to be able to call a wait function with an expression that states an amount of time, using either a template argument or a function argument to specify the amount of time to wait. (For added fun: these declarations are all inside a class template, so full specialization is not allowed.) My preference would be 

```
wait< ms< 10 >>();
wait( 10 * ms );

```

but I'd settle for 

```
wait< ms< 10 >>();
wait( ms( 10 ));

```

I can make a wait function template that accepts either a template argument or a function argument, but for the argument I am stuck. ms< 10 > must be a type, not a built-in, something like

```
template< int n >
struct ms {
   typedef void this_is_a_duration;
   constexpr int amount = n;
};

```

so I can do compile time 'type-cheking' for the presence of this\_is\_a\_duration. But that seems to rule out that ms or ms() is anything but a type, right? And there seems to be now way to make ( 10 \* ms ) a valid expression when ms is a type? (A static conversion function would do it, if such were allowed..)

Is there any way I can make ms<10> be a type and ms or ms(10) be an expression?