fork download
  1. Clang:
  2. main.cpp(123,7) : error: no matching function for call to object of type 'expression_multiply<expression_parameter, expression_parameter>'
  3. res = expr1(3);
  4. ^~~~~
  5. main.cpp(73,9) : note: candidate template ignored: substitution failure [with T = int]: no matching function for call to 'declval'
  6. auto operator()(const T& v) const -> decltype(std::declval<lhs>()(v)*std::declval<rhs_given>(v)) {return lhs::operator()(v)*rhs(v);}
  7. ^ ~~~
  8.  
  9. MSVC10:
  10. 1>f:\code\utilities\exprtemplate\exprtemplate\main.cpp(123): error C2893: Failed to specialize function template ''unknown-type' expression_multiply<lhs,rhs_given>::operator ()(const T &) const'
  11. 1> with
  12. 1> [
  13. 1> lhs=expression_parameter,
  14. 1> rhs_given=expression_parameter
  15. 1> ]
  16. 1> With the following template arguments:
  17. 1> 'int'
  18. 1>
  19.  
  20. GCC:
  21. sscce.cpp: In function 'typename std::enable_if<std::is_base_of<expression_part, lhsexpr>::value, lhsexpr>::type operator>>=(lhsexpr, container&) [with lhsexpr = expression_multiply<expression_parameter, expression_parameter>, container = std::vector<int>, typename std::enable_if<std::is_base_of<expression_part, lhsexpr>::value, lhsexpr>::type = expression_multiply<expression_parameter, expression_parameter>]':
  22. sscce.cpp:60:13: instantiated from here
  23. sscce.cpp:47:9: error: no match for call to '(expression_multiply<expression_parameter, expression_parameter>) (int&)'
  24. sscce.cpp:25:7: note: candidate is:
  25. sscce.cpp:31:10: note: template<class T> decltype ((expression_multiply<lhs_given, rhs_given>::lhs:: operator()(v) * expression_multiply<lhs_given, rhs_given>::rhs:: operator()(v))) expression_multiply::operator()(const T&) const [with T = T, lhs_given = expression_parameter, rhs_given = expression_parameter, decltype ((expression_multiply<lhs_given, rhs_given>::lhs:: operator()(v) * expression_multiply<lhs_given, rhs_given>::rhs:: operator()(v))) = decltype ((inherit2::operator() [with T = T, int number = 0, sub_expr = expression_parameter, decltype (sub_expr:: operator()(v)) = decltype (expression_parameter::operator()(v))](v) * inherit2::operator() [with T = T, int number = 1, sub_expr = expression_parameter, decltype (sub_expr:: operator()(v)) = decltype (expression_parameter::operator()(v))](v))), expression_multiply<lhs_given, rhs_given>::lhs = inherit2<0, expression_parameter>, expression_multiply<lhs_given, rhs_given>::rhs = inherit2<1, expression_parameter>]
  26.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:75: warning: character constant too long for its type
prog.cpp:5:123: warning: character constant too long for its type
prog.cpp:6: warning: identifier ‘decltype’ will become a keyword in C++0x
prog.cpp:10: error: stray ‘\’ in program
prog.cpp:10: error: stray ‘\’ in program
prog.cpp:10: error: stray ‘\’ in program
prog.cpp:10: error: stray ‘\’ in program
prog.cpp:10: error: stray ‘\’ in program
prog.cpp:10:114: error: empty character constant
prog.cpp:10:128: warning: character constant too long for its type
prog.cpp:17:13: warning: multi-character character constant
prog.cpp:21:24: warning: character constant too long for its type
prog.cpp:23:45: warning: character constant too long for its type
prog.cpp:1: error: function definition does not declare parameters
prog.cpp:4: error: expected unqualified-id before ‘^’ token
prog.cpp:7: error: expected unqualified-id before ‘^’ token
stdout
Standard output is empty