我有一些代碼處理函數的地址,lambdas和模板參數。lambda需要聯繫的呼叫運營商嗎?
這裏有一個片段,顯示了我的功能,這些地址的一些用法:
#include <type_traits>
int main() {
auto l = []{};
using L = decltype(l);
// fine, am I just lucky?
using type1 = std::integral_constant<decltype(&L::operator()), &L::operator()>;
struct Bar {
static void baz() {}
};
// error!
using type2 = std::integral_constant<decltype(&Bar::baz), &Bar::baz>;
}
的事情是,爲了能夠發送&Bar::baz
作爲模板參數,它必須有聯繫,因此錯誤。
爲什麼拉姆達的情況下工作?是因爲它不是靜態的,還是因爲lambda的調用操作符有鏈接?
test2在gcc中爲我編譯得很好。你正在使用哪種編譯器? – Frank
成員函數指針是一個值,而不是名稱。價值觀沒有或不需要聯繫。 –
好的...這個例子似乎沒有重現這個問題。我得到了一個輸出錯誤的代碼。我的gcc版本是7.1.1。我將編輯問題 –