
#include <iostream>

#include <
string>
using
namespace std;
template<typename T, typename C>
class ManipInfra

{
private:

T val_;

basic_ostream<C>& (*manipFun_)(basic_ostream<C>&, T );
public:

ManipInfra(basic_ostream<C>& (*pFun)(basic_ostream<C>&, T), T val)

: manipFun_ (pFun), val_(val){

}
void
operator()(basic_ostream<C>& os)
const {

manipFun_(os, val_);

}

};
template<typename T, typename C>

basic_ostream<C>&
operator<<(basic_ostream<C>& os,
const ManipInfra<T, C>& manip) {

manip(os);
return os;

}
ostream& setTheWidth(ostream& os,
int n) {

os.width(n);
return os;

}
ostream& setTheFill(ostream& os,
char c) {

os.fill(c);
return os;

}
ManipInfra<
int,
char> setWidth(
int n) {
return ManipInfra<
int,
char>(setTheWidth, n);

}
ManipInfra<
char,
char> setFill(
char c) {
return ManipInfra<
char,
char>(setTheFill, c);

}
int main()

{

cout << setFill('*') << setWidth(19) << right <<
"djf\n";
return 0;

}