C ++: & (std :: cout) als Template-Argument

Warum ist es nicht möglich, @ zu übergebstd::cout 's Adresse als Template-Argument? Oder wenn es dann möglich ist wie?

Hier ist, was ich versucht habe:

#include <iostream>

template<std::ostream* stream>
class MyClass
{
public:
    void disp(void)
        { (*stream) << "hello"; }
};

int main(void)
{
    MyClass<&(std::cout)> MyObj;
    MyObj.disp();

    return 0;
}

Und die Fehlermeldung, die ich von @ bekommen haclang++ -std=c++11 :

main.cpp:15:11: error: non-type template argument does not refer to any declaration
        MyClass<&(std::cout)> MyObj;
                 ^~~~~~~~~~~
main.cpp:6:24: note: template parameter is declared here
template<std::ostream* stream>
                       ^
1 error generated.

und vong++ -std=c++11 :

main.cpp: In function ‘int main()’:
main.cpp:15:22: error: template argument 1 is invalid
  MyClass<&(std::cout)> MyObj;
                      ^
main.cpp:15:29: error: invalid type in declaration before ‘;’ token
  MyClass<&(std::cout)> MyObj;
                             ^
main.cpp:16:8: error: request for member ‘disp’ in ‘MyObj’, which is of     non-class type ‘int’
  MyObj.disp();
        ^

Irgendwelche Ideen

Antworten auf die Frage(4)

Ihre Antwort auf die Frage