방학이라 신나게 놀고 있는 급식이야


C++로 웹페이지를 다운할 때 Boost.Asio 라이브러리를 사용하려고 하는데(Beast)


클랭으로 컴파일하면 딱히 문제가 안되는데

ICC로 컴파일하려니깐 애러가 나더라구


(boost::asio::detail::is_applicable_property_trait)

template <typename T, typename Property>
struct is_applicable_property_trait<T, Property,
typename void_type<
typename enable_if<
!!Property::template is_applicable_property_v<T>
>::type
>::type> : true_type

||||

is_applicable_property.hpp(48): error: argument list for variable template

"boost::asio::execution::detail::outstanding_work::tracked_t<I>::is_applicable_property_v [with I=0]" is missing


여기서 Property::template

템플릿이라고 힌트를 주는(?) 부분에서 잘못돌아가는거같은데


!!std::declval<Property>().template is_applicable_property_v<T>


이렇게 잠깐 바꿔보니 여긴 해결된건지 윗부분에서 문제가 발생하더라


(boost::asio::detail::composed_work_guard)

typedef typename decay<
typename prefer_result<Executor,
execution::outstanding_work_t::tracked_t // 참고로 여기서 나중에 위 코드가 실행되게됨
>::type
>::type executor_type;

...

executor_type executor_;


error: incomplete type is not allowed

executor_type executor_;

 ^


혹시 이 executor_type이 컴파일 타임에 문제가 되는건지 싶어서

static_assert(!std::is_same_v<std::void_t<executor_type>, void>, "");

를 앞에다 붙여보니 잘 어설트 되긴 하던데,


그래서 궁금한게

1. Property::template 에서 애러가 나는게 icc의 문제가 맞는지 아니면 부스트의 문제인지

2. is_applicable_property_v는 불 타입인데, 여기에 !! 붙인 이유가 뭔지

3. executor_type은 SFINAE도 일어나지 않은거같은데 incomplete 타입이라고 애러가 뜨는 이유는 무엇일지..


긴 글 읽어줘서 고마워 형들