bbb の行がコメント アウトされていないが、その前の行がコメント アウトされていない場合に、次のコードがコンパイルされて期待どおりに動作する理由を知りたいのですが、aaa でマークされた行がコメント アウトされておらず、bbb の行がコメント アウトされていない場合は失敗します。は:
#include <iostream>
#include <string>
using String = std::string;
struct Person {
String m_name;
explicit Person(String const &name): m_name(name) {}
operator String() const { return "\"" + m_name + "\""; }
};
template<class T> bool isEqual(
T const& a,
//T const& // does NOT compile // aaa
decltype(a) // DOES compile // bbb
b){ return a == b; }
int main()
{
String const plain("plain");
Person const jb("James");
bool b = isEqual(plain, jb);
std::cout << "isEqual(plain, person) is " << ( b ? "true" : "false" ) << "\n";
}